1
我正在更新從4.3.3到4.9.4的手臂交叉編譯器。我看到的一個問題是,新編譯器不再自動包含依賴庫。例如:gcc鏈接器不會自動包含依賴庫
GCC ... -L -l -lssl -lrt
正常工作與以前的編譯器。如果libssl需要引用libcrypto中的某些內容,那麼鏈接程序會自動查找並鏈接到libcrypto(不需要-lcrypto)。
使用新的編譯器,這仍然有效,但前提是libssl不引用libcrypto中的任何內容。如果是這樣,那麼-lcyrpto是必需的。同樣的問題適用於-lpthread,-ldl等。
這是gcc行爲的變化還是在構建gcc時沒有正確配置?
這些是動態庫。 binutils也從2.18更新至2.28。所以我認爲你說這是binutils(ld)連接器的有意變化。 – Jay
@Jay:是的,但binutils更改只會影響您,如果您的應用程序使用'libcrypto'中的符號而沒有顯式的'-lcrypto'。即使沒有'-lcrypto','libssl'使用'libcrypto'中的符號也很好,因爲動態庫存儲它的依賴信息。 –
我的經驗與我對你所說的內容的理解不符。我用一個空的main()函數做了一個簡單的測試C文件,然後編譯並鏈接到我的庫(-lfoo)。 libfoo與-lssl和-lcrypto鏈接,事實上,objdump -x顯示庫將libssl和libcrypto列爲必需的。用舊的編譯器,我的測試程序編譯得很好。使用更新後的編譯器,除非我還將-lssl和-lcrypto添加到正在編譯的C文件中 - 即使它沒有引用這些庫,也不會。 – Jay