簡體   English   中英

如何在靜態庫中使用g ++正確鏈接?

[英]How do I correctly link in static libraries with g++?

我有一個相當復雜的構建,我試圖做,但我會簡化這個問題的一點點。 我有三個c ++文件(main.cpp file2.cpp和file3.cpp),我正在嘗試編譯並鏈接3個靜態庫(libx.a liby.z libz.a)以生成可執行文件。

涉及許多依賴項。

所有三個c文件都依賴於所有3個庫。 libx依賴於liby和libz。 最后,libx還依賴於file2.cpp中包含的幾個回調函數。

什么命令行可以正確構建它? 我已經嘗試過幾十種變體,但還沒有任何東西能滿足鏈接器。

如果重要,libs是用gcc編譯的純c代碼。 來源是c ++,我正在編譯/鏈接g ++。 我有這個正常工作作為一個視覺工作室項目,我正在嘗試移植到Linux。

從你的帖子:

g++ main.cpp file2.cpp file3.cpp -lx -ly -lz

但是,如果靜態鏈接導致您出現問題,或者您需要分發任何lib,那么您可以考慮將它們作為共享對象.so文件,通常稱為DSO )。 在這種情況下,例如,在構建libx.a ,將所有源代碼編譯為目標文件,然后將它們組合在一起

g++ -shared *.o -o libx.so -ly -lz

(這個版本假設liby.alibz.a仍然是靜態的,並將合並到libx.so

您可能需要在.cpp文件中使用extern "C" { }來包含C libs的標頭。

請參閱如何混合使用C和C ++ 在C ++包含C標頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM