我一直致力于使用mingw-w64构建Windows可执行文件的项目。我决定使用libtins为项目测试并从libtins的网站下载库文件(.lib)。使用VisualStudio2015编译的.lib文件。我想静态链接库和链接失败,以解决我正在使用的未定义引用。我后来发现,通过在库文件中使用nm,VisualStudio2015以与MinGW不同的方式破坏符号。所以我然后使用MinGW从源代码编译了libtins。但是,在尝试链接新编译的库之后,未定义的引用仍然无法解析。使用nm我可以看到我的目标文件中的未定义符号与库中找到的所需符号相匹配,但文件无法链接到可执行文件中。然后,我使用ar从库中提取目标文件,然后慢慢添加所需的目标文件,最终将可执行文件链接并运行正常。
我也发现了这个answer并且整个存档的链接也成功了。什么情况会导致这样的问题?我可以链接到单个目标文件,但不能链接到包含这些文件的库存档,或者我可以链接到整个存档,但不能链接到其中的各个组件。有什么可以解释这种行为?
编辑:
链接失败并使用此命令
/usr/local/Cellar/mingw-w64/5.0.3/bin/i686-w64-mingw32-g++ -static -L/usr/local/Cellar/mingw-w64/5.0.3/toolchain-i686/mingw/lib -L../../libtins/lib -L../../wpcap/Lib/ -o dist/test.exe obj/main.o obj/test.o -ltins -liphlpapi -lwpcap -lws2_32 -lpthread -lntdll -lmsvcrt -lstdc++