【发布时间】:2013-05-09 15:45:54
【问题描述】:
我正在尝试构建 gdal-1.10.0 (http://trac.osgeo.org/gdal/wiki/DownloadSource) 使用 mingw64 (来自 http://sourceforge.net/projects/mingwbuilds/files/host-windows/ x64-4.8.0-release-posix-seh-rev2.7z)。我已经编译了gdal-1.10.0下 标准 MinGW(32 位)版本没有问题。
我必须切换到 mingw64 的原因是标准的 32 位 MinGW 发行版
不支持 std::thread 之类的 c++11 功能,以及(我怀疑)其他功能
好吧。但最后我得到一个链接错误,告诉我一些关于
undefined reference to '__imp_GetACP'
(如果我使用 32 位变体,则使用不同的修饰名称
mingw64/mingw-builds)。顺便说一句,我尝试了不同版本的 mingw64,包括
64 位、32 位、seh、sjlj,但都给出了关于 GetACP() 的相同错误。
我做了一些功课,发现了一些类似编译任务的说明: http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env 根据上面的网站,似乎他们提示的问题已经做 使用 WOW64 和正确版本的 windows dll 文件无法使用,因为 Windows 会根据 32 位或 发出调用的 64 位应用程序。这应该是 mingw64 的问题 因为编译器 gcc 是 64 位的,而 msys 是 32 位的。
但是由于我也尝试了32位版本,上面似乎没有解释
错误。
更重要的是,我试图以一种肮脏的方式注释掉所有对GetACP()的调用,
因为我并不真正关心代码页以及出于我的目的的所有这些。
奇怪的是,编译是可以的(在一个新的源代码上,只是 GetACP() 被注释掉了),但仍然报告了相同的链接错误。我检查了libkernel32.a、libiconv.a 是否在lib 文件夹中,并且还按照上面博客中的说明从
c:\windows\system32 并将它们放在具有适当重命名的 mingw 子文件夹中。链接错误仍然存在。这就是我在花了将近两天没有成功之后停止黑客攻击的地方。我不明白为什么整个源代码不包含对函数的单个调用,而且我仍然收到链接错误。
谁能解释一下gdal和mingw64之间可能导致这个问题的原因, 以及如何解决?
另外,关于 mingw64 的一个普遍问题是它真的能够支持 posix函数?我看到包名称,例如 x64-4.8.0-release-posix-seh-rev2.7z,不过记得MinGW的人说 他们永远不会支持完整的 posix。
附: 我正在 Windows Server 2008 R2 64 位上对此进行测试。
更新: MinGW64(mingw-builds)下构建gdal-1.10.0的完整步骤为:
$./configure
那么, 编辑 GDALmake.opt,找到 GDAL_ROOT 并将 cygwin 驱动格式替换为 dos/mingw 格式,例如 变化:
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/
【问题讨论】:
标签: linker configure gdal wow64 mingw-w64