C ++ - 构建静态库问题

时间:2010-08-21 11:01:27

标签: c++ linker mingw

我使用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静态库中?

谢谢。

3 个答案:

答案 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
相关问题