linker - mingw64 下的 GetACP 链接错误(mingw-builds)

标签 linker configure gdal wow64 mingw-w64

我正在尝试构建 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 发行版
不支持 C++11 特性,如 std::thread ,以及(我怀疑)其他功能
好。但最后我得到一个链接错误告诉我一些关于

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。

附言
我正在 64 位 Windows Server 2008 R2 上对此进行测试。

更新:
在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/

最佳答案

我不小心遇到了同样的问题。
也许这是一个 MinGW 错误或错误的配置文件,但解决方案是添加
-liconv 到链接器标志的末尾,例如,替换

CONFIG_LIBS =   $(GDAL_ROOT)/$(LIBGDAL)   


CONFIG_LIBS =   $(GDAL_ROOT)/$(LIBGDAL)   -liconv

在 GDALmake.opt 文件中(通过在文件中搜索 Mingw 目录中的 GetACP 找到)。

关于linker - mingw64 下的 GetACP 链接错误(mingw-builds),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558813/

相关文章:

linux - 配置 make gnome commander - no glib 2.6.0

python - 在 Linux 中为 Python 使用不同的 LIBDIR 路径

python - 导入 GDAL 会打印很多错误消息,但仍然有效

python - pygdal 版本配置错误

python - 在 Python 中调整大图像的大小(大于可用 RAM)

c++ - Sun CC : where does symbol "PointZERO" come from? 它不在我的源代码中

c - 如何从共享库(elf/gcc)中删除未使用的引用

c++ - 在 C++ 中链接静态库时对 ... 的 undefined reference

Nginx 配置错误 : can not detect int size

c++ - MinGW隐藏dll中的方法名称