[英]Can I have the gcc linker create a static library?
我有一個包含大約300個c ++文件的庫。
使用庫的程序不希望動態鏈接到它。 (由於各種原因,但最好的是一些受支持的平台不支持動態鏈接)
然后我使用g ++和ar創建一個靜態庫(.a),該文件包含所有這些文件的所有符號,包括庫不想導出的文件。
我懷疑將消耗程序與此庫鏈接需要花費不必要的長時間,因為.a中的所有.o文件仍然需要解析其引用,並且鏈接器有更多符號要處理。
在創建動態庫(.dylib / .so)時,您實際上可以使用鏈接器,該鏈接器可以解析所有lib內符號,並僅導出庫要導出的那些符號。 然而,結果只能在運行時“鏈接”到消耗程序中。
我想以某種方式獲得動態鏈接的好處,但使用靜態庫。
如果我的谷歌搜索是正確的,認為這確實是不可能的,我很想理解為什么這是不可能的,因為它似乎是許多c和c ++程序可以從中受益的東西。
靜態庫只是檔案(因此是“.a”),是.o文件的集合。 就像tar檔案一樣,更為簡單。 由於ar不是鏈接器,因此沒有聚合(如“ld -r”所做),因此沒有內部符號消除。
這就是為什么共享庫首先發明的原因,現在它們非常普遍,所以人們只是忽略了靜態庫的缺點。 他們只是簡單地說“它編譯它?”。
我沒有嘗試或測試過這個,但看起來ld
執行增量或部分鏈接的能力可能就是你要找的東西。 在應用於將進入庫的目標文件時,檢查--relocatable
選項(您可能還需要查看-Ur
選項,如果處理C ++)是否可以執行您想要的操作。
我認為您應該能夠將該操作的輸出用作目標文件(或將其放在靜態庫本身中),以用於程序的最終鏈接步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.