轉:關於GCC中同時使用動態和靜態庫連結的巨集指令引數和解釋

來源:互聯網
上載者:User

來自:http://blog.sina.com.cn/s/blog_4cb133e5010009zx.html

 

    在我們開發的一個系統中,由於動態連結其中的一個動態庫時,編譯時間沒有問題,而運行時不能進行,如果將該庫靜態串連時,運行卻沒有問題。具體什麼原因,一直沒有搞清楚,權且當作暫時的解決辦法。

   如何同時同時使用動態和靜態庫連結,同事周楠提供了一個參數的用法,在GCC指令參數中具體參數如下:    -Wl,-Bstatic -L/usr/local/sqlite-arm-linux/.libs -lsqlite -Wl,-Bdynamic -L/usr/local/arm/3.3.2/lib  具體用途解釋:sqlite庫靜態串連,其它庫動態串連。-Wl,-Bstatic 與-Wl,-Bdynamic參數,從字面意義上可以理解,有靜態和動態意思,但是具體的真正規則在尋找了GCC的原版手冊上有說明。 原文:

Note - if the linker is being invoked indirectly, via a compiler driver (eg gcc) then all the linker command line options should be prefixed by -Wl, (or whatever is appropriate for the particular compiler driver) like this:

 gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup
 

This is important, because otherwise the compiler driver program may silently drop the linker options, resulting in a bad link.

 

實際上主要針對隱式應用LINKER的參數,用“-Wl,”來標識,,“--startgroup foo.o bar.o -Wl,--endgroup”表示一組,,-Bstatic -Bdynamic 作為關鍵字與-WL,不可分,在GCC串連庫時,預設連結是動態連結,現在用上面的指令限制在連結sqlite庫時採用靜態連結。

 

-Bstatic 還有三個寫法: -dn和-non_shared 和-static

-Bdynamic 還有兩個寫法:-dy-call_shared

上面參數“-L/usr/local/sqlite-arm-linux/.libs ”放不放在-Wl,...之間無所謂,因為它只是提供了sqlite動靜態庫的位置。可以改成下面的參數形式,更直觀。

 

-L/usr/local/sqlite-arm-linux/.libs -L/usr/local/arm/3.3.2/lib -Wl,-dn -lsqlite -Wl,-dy  

 

-Wl,-dn 和 -Wl,-dy成對出現才能起到標題所說的作用。  

 

關於-Wl,後面的參數還有很多,全部明白我也不能。

 

還有一個問題值得注意,在-Wl,後面不能有空格,否則會出錯!

 

關於-Wl,option 說明還有一段說明

 

GCC命令參數的英文原文

 

-Wl,option

Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas.

傳遞參數option作為linker的一個參數,如果option包含逗號,將在逗號處分割成幾個參數。

 

例如:

-Wl,-dn –lsqlite

-dn 開始靜態連結

-lsqlite 靜態連結sqlite庫

靜態連結完後,然後需要動態連結

-Wl,-dy

重新開始動態連結。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.