【问题标题】:Link error with GetACP under mingw64 (mingw-builds)在 mingw64 (mingw-builds) 下与 GetACP 链接错误
【发布时间】: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.alibiconv.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


    【解决方案1】:

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

    CONFIG_LIBS =   $(GDAL_ROOT)/$(LIBGDAL)   
    

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

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

    【讨论】:

    • 这太棒了。使用 x64-4.8.1-release-posix-seh-rev0 (mingw-builds) 测试。注意:似乎GDALmake.opt中已经有一个-liconv。但是,不知何故,它没有在 MinGW64 下被拾取(每个 mingw-builds)。
    • 那么,为什么会出现这个错误?
    • 有类似的情况,出现这样的错误。将 iconv(从 cmake)的添加顺序更改为最后一个位置后,错误消失了。
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多