使用Visual Studio編譯Geos

來源:互聯網
上載者:User

Geos是一個GIS領域做拓撲分析的庫,目前最新的版本是3.5.0,詳細的介紹參考 GeosTrac

在我編譯該庫的過程中發現官方提供的檔案有一些問題,解決之後作個記錄,方便日後編譯的時候查閱:


Geos從3.5.0版本開始支援使用CMake的方式進行編譯,但是目前提供的CMake.txt配置有一些問題,當使用CMake產生工程的時候出現以下錯誤:


解決的方案參考: cannot build geos 3.5.0 需要下載兩個檔案: 1.CMakeLists.txt替換原來的CMakeLists.txt 2.GenerateSourceGroups.tx將該檔案的尾碼名修改為.cmake,並拷貝到geos-3.5.0\cmake\modules目錄下 之後重新Configure一下並Generate產生工程,使用VS開啟產生好的工程,如下圖所示:

工程中geos用來編譯動態庫geos(產生goes.lib和geos.dll),geos-static產生的是靜態geos庫(產生libgeos.lib),geos_c是產生C語言的庫(geos_c.lib和geos_c.dll),可以根據自己的需求編譯相應的庫。 編譯該解決方案,發現在編譯geos工程的時候報錯:

這是因為工程中某個檔案引入了標頭檔 windows.h,導致windows.h中定義的max宏與c++標準庫中的std::max衝突,具體出錯的位置在BufferOp.cpp檔案中的第89-92行。解決的方法很簡單,在std::max中加上括弧,不讓它進行宏替換,而是調用std::max這個函數,也就是修改為:

//原始的檔案  double envMax = std::max(    std::max(fabs(env->getMaxX()), fabs(env->getMinX())),    std::max(fabs(env->getMaxY()), fabs(env->getMinY()))  );  //修改之後:  double envMax = (std::max)(    (std::max)(fabs(env->getMaxX()), fabs(env->getMinX())),    (std::max)(fabs(env->getMaxY()), fabs(env->getMinY()))  );
修改之後重新編譯一下即可。


附錄:我把下載的檔案上傳到了資源共用中,可以從裡面下載: 下載連結


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.