我正在寫一個基於libpthread.so的共享庫。要構建它,我用下面的命令:如何在linux中創建共享庫時包含依賴信息?
gcc -fPIC -shared -lpthread -o libfoo.so foo.c
但連接使用libfoo.so文件時,我必須指定選項-lpthread -lfoo
不僅僅是-lfoo
。另外,ldd libfoo.so
不顯示關於libpthread.so的任何信息。
那麼,有沒有什麼辦法可以避免'-lpthread'?
我正在寫一個基於libpthread.so的共享庫。要構建它,我用下面的命令:如何在linux中創建共享庫時包含依賴信息?
gcc -fPIC -shared -lpthread -o libfoo.so foo.c
但連接使用libfoo.so文件時,我必須指定選項-lpthread -lfoo
不僅僅是-lfoo
。另外,ldd libfoo.so
不顯示關於libpthread.so的任何信息。
那麼,有沒有什麼辦法可以避免'-lpthread'?
擴展@Someprogrammerdude的評論:
您的命令行是在錯誤的順序,你需要把 你想最後一個鏈接庫:
gcc -fPIC -shared -o libfoo.so foo.c -lpthread
我要說,這樣做是件壞事。連接其他共享庫的共享庫並不好,因爲:
特別是在glibc的(其部分的libpthread)是長二進制兼容性非常重要的,所以它並不真正的問題,與你的libpthread編譯的二進制文件,它會無處不在的foreseeble今後的工作。而且,如果不是,它會導致鏈接器錯誤,而不是神祕的錯誤。
因此,最佳的解決方案是:
-lfoo
和-lpthread
。(2)是不是一個很大的問題 - 有哪些可以自動生成所需的編譯器/連接器選項的庫各種工具(如GNU autoconf的)。
你的命令行順序錯誤,你需要把你想鏈接的庫放到最後*:'gcc -fPIC -shared -o libfoo.so foo.c -lpthread' –
它的工作原理!非常感謝! – olist