我使用MinGW(GCC 4.5.0)编译系统构建了libbz2
(静态变体),现在尝试将此库导入我的MSVS2008项目。
我已经完成了这些事情并且一切正常,例如zlib
(这意味着创建的C库实际上是可以互换的)。
然而,当对libbz2
做同样的事情时,我面临一些未知的麻烦 - 当我编译我的MSVS2008项目时,我在链接阶段收到以下错误:
unresolved external symbol ___chkstk referenced in function _bzopen_or_bzdopen
我不知道为什么会发生这种情况(我认为这是因为某些基本的C运行时不完全兼容),但也许有人知道如何修复这种错误?
也许有一种手动方式以某种方式将基于MinGW的___chkstk
的实现合并到libbz2
静态库中?
谢谢。
答案 0 :(得分:2)
谢谢大家,我找到了答案。
基本上,您只需链接到构建库时使用的libgcc.a / libgcc.lib
。
处理___chkstk
问题的更方便的方法仅意味着执行ar x libgcc.a
(生成许多.o文件),然后将libbz2
目标文件与{{1}合并文件。
答案 1 :(得分:2)
我读了你的答案,但我认为有一种更容易(自动)的方法来手动合并目标文件:使用CFLAG -static-libgcc
,它将链接必要的功能(你在描述和做什么)手动地)。
答案 2 :(得分:0)
我认为它应该在链接器选项中,例如 LDFLAGS = -static ,而LDFLAGS = -static-libgcc仍然提供动态链接的二进制文件...与任何test.c:
gcc -c test.c
gcc -static-libgcc test.o
ldd a.out
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
gcc -c test.c
gcc -static test.o
ldd a.out
not a dynamic executable
对于图书管理员,只需使用ar
ar q libtest.a <path>/libgcc.a