- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我从我的程序链接到 zbar。我使用 mingw/msys 构建了 zbar。我的应用程序是使用 Qt Creator 构建的。
当我使用 libzbar.dll.a
动态链接到 zbar 时,它编译并运行良好。当我链接到 libzbar.a
时,构建我的应用程序失败并出现链接器错误:
C:/Qt/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/lib/../lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x7): undefined reference to `_imp__GetACP@0'collect2.exe: error: ld returned 1 exit status
This convoluted path - C:/Qt/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/lib/../lib/libiconv.a
- resolves to C:\Qt\Tools\mingw491_32\i686-w64-mingw32\lib\libiconv.a
. So it seems that Qt Creator is trying to link against its own libiconv.a
, which is missing some functions that libzbar.a
needs to use.
I'm not sure how to make Qt Creator use the msys libiconv.a
, I tried this:
LIBS += c:/mingw/lib/libiconv.a
LIBS += $$PWD/zbar/lib/libzbar.a
但它没有效果,我得到了同样的错误。我如何说服 Qt Creator 使用 c:/mingw/lib/libiconv.a
而不是它自己的版本?
编辑:这是重现错误的最小代码:
#define NULL 0
#include <zbar.h>
int main()
{
zbar::ImageScanner scanner;
return 0;
}
在 .pro 文件中我有:
INCLUDEPATH += c:/MinGW/msys/1.0/local/include
LIBS += -Lc:/MinGW/msys/1.0/local/lib -lzbar
最佳答案
非常感谢@skypjack,他的解决方案有效。我只会添加一些我通过测试发现的东西:
PRE_TARGETDEPS
并不是真正必要的,这 3 行足以使项目编译:
INCLUDEPATH += c:/MinGW/msys/1.0/local/include
LIBS += c:/MinGW/msys/1.0/local/lib/libzbar.a
LIBS += c:/MinGW/lib/libiconv.a
这很奇怪,因为我清楚地记得在将我的问题发布到 SO 之前尝试过这个。但是在交换最后两行之后:
INCLUDEPATH += c:/MinGW/msys/1.0/local/include
LIBS += c:/MinGW/lib/libiconv.a
LIBS += c:/MinGW/msys/1.0/local/lib/libzbar.a
错误返回。我确实将 libiconv.a
放在 libzbar.a
之前,所以错误确实是因为链接顺序。
编辑:最后,连Qt Creator自带的libiconv也能用,只是我需要在zbar之后加上:
LIBS += -Lc:/MinGW/msys/1.0/local/lib -lzbar -liconv
关于c++ - 静态链接到 libzbar.a 时出错 : undefined reference to `_imp__GetACP@0' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174361/
我从我的程序链接到 zbar。我使用 mingw/msys 构建了 zbar。我的应用程序是使用 Qt Creator 构建的。 当我使用 libzbar.dll.a 动态链接到 zbar 时,它编译
我是一名优秀的程序员,十分优秀!