C++ C++;-构建静态图书馆问题

C++ C++;-构建静态图书馆问题,c++,linker,mingw,C++,Linker,Mingw,我使用MinGW(gcc4.5.0)编译系统构建了libbz2(静态变量),现在尝试将这个库导入到我的MSVS2008项目中 我已经做了这些事情,一切都很好,例如,使用zlib(这意味着创建的C库实际上是可互换的) 然而,当我对libbz2执行相同操作时,我面临一些未知的问题-当我编译我的MSVS2008项目时,我在链接阶段收到以下错误: unresolved external symbol ___chkstk referenced in function _bzopen_or_bzdopen

我使用MinGW(gcc4.5.0)编译系统构建了
libbz2
(静态变量),现在尝试将这个库导入到我的MSVS2008项目中

我已经做了这些事情,一切都很好,例如,使用
zlib
(这意味着创建的C库实际上是可互换的)

然而,当我对
libbz2
执行相同操作时,我面临一些未知的问题-当我编译我的MSVS2008项目时,我在链接阶段收到以下错误:

unresolved external symbol ___chkstk referenced in function _bzopen_or_bzdopen
我不知道为什么会发生这种情况(我认为这是因为一些基本的C运行时不完全兼容),但也许有人知道如何修复这种错误?

也许有一种手动方式可以将基于MinGW的
\uuuuu chkstk
实现合并到
libbz2
静态库中


谢谢。

谢谢大家,我找到了答案

基本上,您可以简单地链接到构建库时使用的
libgcc.a/libgcc.lib


处理
\uuuuuuu chkstk
问题的更方便的方法只意味着做一些类似于
ar x libgcc.a
(它生成许多.o文件)的事情,然后将
libbz2
对象文件与
\uuuchkstk.o
文件合并。

我读了你的答案,但我认为有一个更简单的(自动)方法手动合并对象文件的方法:使用CFLAG
-static libgcc
,它将链接必要的函数(您正在手动描述和执行的操作)。

我认为应该在链接器选项中,例如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
ar q libtest.a/libgcc.a