我試圖用mingw64打造GDAL-1.10.0 (http://trac.osgeo.org/gdal/wiki/DownloadSource)(從 http://sourceforge.net/projects/mingwbuilds/files/host-windows/ x64-4.8.0釋放小POSIX的SEH-rev2.7z )。我在 標準MinGW(32位)版本下編譯了gdal-1.10.0,沒有問題。鏈接出錯(MinGW的-版本)
我之所以要切換到mingw64是,標準的32位的MinGW分佈 不支持C++ 11層的功能,如std::thread
,和(I懷疑)其它特徵 好。但我得到最終的連接錯誤,告訴我一些關於
undefined reference to '__imp_GetACP'
(或不同的修飾名,如果我用的是32位的變體與 mingw64/MinGW的-版本)。順便說一句,我試過不同版本的mingw64,包括 64位,32位,seh,sjlj,但都給出了關於GetACP()
的相同錯誤。
我做了一些功課,並發現了類似的編譯任務的一些說明: http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env 根據上面的網站,似乎他們認爲這個問題必須做 與WOW64和Windows動態鏈接庫文件的正確版本不能因爲 窗口會根據32位或 64位應用程序進行呼叫而自動爲您確定。這應該是mingw64 的問題,因爲編譯器gcc是64位的,但msys是絕望的32位。
但是因爲我也試過32位版本,所以上面好像沒有解釋 的錯誤。 此外,我試圖用一種骯髒的方式來評論所有對GetACP()
, 的調用,因爲我並不真正關心代碼頁和所有這些用於我的目的。 奇怪的是,編譯是可以的(僅在GetACP()
已被註釋掉的新鮮源代碼中),但仍然報告相同的鏈接錯誤。我檢查了libkernel32.a
,libiconv.a
位於lib
文件夾中,並且也按照上面博客中的說明將dll從 c:\windows\system32
中複製出來,並將它們放置在具有適當重命名的mingw子文件夾中。鏈接錯誤仍然存在。這是我在這方面花費了近兩天才停止黑客入侵的地方,但沒有成功。我不明白爲什麼整個源代碼不包含一個單一的函數調用,我仍然收到鏈接錯誤。
任何人都可以解釋什麼可能導致此問題之間gdal和mingw64, 以及如何解決它?
此外,關於mingw64的一個普遍問題是,它真的能夠支持 posix函數嗎?我看到的軟件包名稱如 x64-4.8.0-release-posix-seh-rev2.7z,但我記得MinGW的人說他們永遠不會支持完整的posix。
P.S. 我在Windows Server 2008 R2(64位)上測試此項。
更新: 爲MinGW64下建立@中-1.10.0(MinGW的-版本)完整的操作步驟是:
$./configure
然後, 編輯GDALmake。opt,找到GDAL_ROOT並用dos/mingw格式替換cygwin驅動格式,例如 變化:
GDAL_ROOT = /d/temp/build/gdal-1.10.0
到
GDAL_ROOT = d:/temp/build/gdal-1.10.0
更換
CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL)
與
CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv
最後,
$ make && make install && cp apps/*.exe /usr/local/bin/
這很好。使用x64-4.8.1-release-posix-seh-rev0(mingw-builds)進行測試。注意:似乎GDALmake.opt中已經有一個-liconv。但是,不知怎的,它在MinGW64(每個版本)下都沒有找到。 – tinlyx
那麼,爲什麼會出現這個錯誤? –