我正在编写基于libpthread.so的共享库。要构建它,我使用以下命令:
gcc -fPIC -shared -lpthread -o libfoo.so foo.c
但是当链接使用libfoo.so的文件时,我必须指定选项-lpthread -lfoo
而不只是-lfoo
。此外,ldd libfoo.so
并未显示有关libpthread.so的任何内容。
那么,有什么方法可以避免' -lpthread'?
答案 0 :(得分:0)
扩展@Someprogrammerdude的评论:
您的命令行顺序错误,您需要放置库 您想要与上一个链接:
gcc -fPIC -shared -o libfoo.so foo.c -lpthread
我会说,这样做是件坏事。链接其他共享库的共享库不合适,因为:
特别是在glibc(其部分是libpthread)中, long 二进制兼容性非常重要,所以它并不重要,使用libpthread编译你的二进制文件,它将在任何地方工作在可预见的未来。而且,如果没有,它将导致链接器错误,而不是神秘的错误。
因此,最佳解决方案是:
-lfoo
和-lpthread
。(2)不是一个很大的问题 - 有各种工具(比如gnu autoconf),可以自动生成所需编译器/链接器标志的库。