2011-02-01 169 views
7

我想在項目中構建靜態和共享庫創建靜態和共享C++庫

我知道共享庫需要用-fpic編譯的對象來創建,以獲得位置無關的代碼,而靜態庫不需要這個。這一切都很好,我可以創建一個共享或靜態庫。

我不想編譯我的源碼兩次以獲得不同的目標文件,那麼通常如何實現?我讀了how to get a shared library based on a static one。但是,該示例顯示了正在使用-fpic構建的靜態庫。這是要走的路嗎?有什麼東西要注意這個嗎?

是否有常用方法來編譯靜態庫和共享庫?例如。首先靜態並基於lib創建一個共享版本?

我很想知道是否有不同的方法和選擇時需要考慮的問題。

我在Linux上使用gcc4.4。

在此先感謝!

回答

6

我見過的常見方法實際上是兩次編譯源碼,一次是PIC,一次沒有。如果你不這樣做,你最終會在靜態庫中產生PIC開銷,或者操作系統無法重定位的共享對象(實際上意味着它不在庫的多個客戶端之間共享)。

+0

對於這種方法,如果想同時創建靜態庫和共享庫,那麼如何安排目標文件?類似於obj/static/...和obj/shared/...? – murrekatt 2011-02-01 14:44:48