我的编译环境是的CentOS 5。我有一个名为libcunit的第三方库。我使用自动工具安装它,它会生成libcunit.a
和libcunit.so
。我有我自己的应用程序,链接到一堆共享库。 libcunit.a
在当前目录中,libcunit.so
和其他共享库在/usr/local/lib/
。当我编译这样的:GCC静态库链接VS动态链接
gcc -o test test.c -L. libcunit.a -L/usr/local/lib -labc -lyz
我得到一个链接错误:
libcunit.a(Util.o): In function `CU_trim_left':
Util.c:(.text+0x346): undefined reference to `__ctype_b'
libcunit.a(Util.o): In function `CU_trim_right':
Util.c:(.text+0x3fd): undefined reference to `__ctype_b'
但是,当我与.so
编译,如:
gcc -o test test.c -L/usr/local/lib -lcunit -labc -lyz
它编译罚款和运行正常了。
为什么与libcunit.a
静态连接时,它给错误?
这个答案是不正确的问题有*不*做与库顺序。 –
@雇佣俄罗斯:你在哪里看到我的答案是解决_“图书馆订购”_的问题?建议的命令行只是OP命令行的一个复制粘贴,带有一些编辑/添加的标志,但没有改变链接顺序。 –
如果直接列出libcunit.a,则不需要'-Wl,-Bstatic'(如同OP一样)。 –