看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《mozzan (mozzan)》之銘言: : 標題: [問題] library 和 linker 問題 : 時間: Tue Mar 19 20:30:01 2013 : : 大家好 : : 我想請問關於linking library的一些問題 : : 假定現在有支程式會用到A library的Function X : : 所以在link 的時候會把Function X 複製一份到 : : 執行檔裡頭嗎??? : : 他應該不是將整包library copy 過來吧?? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 114.35.64.181 : 推 LPH66:有點想推《程式設計師的自我修養》這本書 (思) 03/19 20:49 : → diabloevagto:那本書推到爛了 03/19 21:22 不用出動到這本, 自己做實驗就可以了。 我在 linux 的測試方法: 建立一個 static library, 使用 ar rcs libt.a l1.o l2.o 寫一個 main function 呼叫 l1.o 裡頭的一個 function - f1(), 最後 link 這個 libt.a 得到的 elf 執行檔, 會包含 l1.o 所有的東西。 l2.o 的東西不會被複製到 elf 執行檔。 該怎麼檢查呢? 很簡單, 使用 objdump m 就可以了, 可以看到 f1(), f2() 都包含在內。 0000000000400544 <f1>: 400544: 55 push %rbp 400545: 48 89 e5 mov %rsp,%rbp 400548: bf 5c 06 40 00 mov $0x40065c,%edi 40054d: e8 ce fe ff ff callq 400420 <puts@plt> 400552: c9 leaveq 400553: c3 retq 0000000000400554 <f2>: 400554: 55 push %rbp 400555: 48 89 e5 mov %rsp,%rbp 400558: bf 5f 06 40 00 mov $0x40065f,%edi 40055d: e8 be fe ff ff callq 400420 <puts@plt> 400562: c9 leaveq 400563: c3 retq source code: https://github.com/descent/progs/tree/master/static_lib : 我想知道他是靜態或是動態連結 : 我應該要怎麼看,是不是他會產生dll檔 程式是動態還是靜態連結, 這只能問你, 你應該有整個編譯環境, 編譯方法決定要使用 動態還是靜態連結 來產生最後結果。 不是每個開發環境的動態連結都會以 .dll 命名, 就算是以 .dll 命名, 你自己能確定那就是 動態連結 嗎? 如果你不知道, 那表示你對於開發環境完全不熟悉, 如果對於開發程式沒有影響, 到也不用急著了解。 : 推 QQ29:我也想問只有lib怎區分他是static or dynamic..看大小嗎xd 03/20 10:21 : ※ 編輯: mozzan 來自: 114.35.64.181 (03/20 12:34) : → EdisonX: 我以為是看副檔名 …(誤) 03/20 12:14 : → hilorrk:readelf -h ? 03/20 23:33 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.46 ※ 編輯: descent 來自: 59.125.239.46 (03/22 09:24) ※ 編輯: descent 來自: 59.125.239.46 (03/22 09:28)
mozzan:很有幫助,感謝你的回答 03/22 14:12