Re: [問題] gcc 下編譯同名函式..

看板C_and_CPP (C/C++)作者 (參四)時間18年前 (2006/05/09 20:48), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
> 一是 gcc 連結時不知有無選項可以要求連結到最後找到的函式? > (我是沒看到這個選項.. 請指點) > 另一個就是想辦法把第二個 obj file 先連結進 library 感謝大家的建議, 忙祿了一個早上之後, 我來自問自答了.. Orz 最後使用的方法算是兩個方法的綜合.. 在連結函式庫的時候我們用的是 binutils 的 ar 這個程式 其中有一個主要選項是 -r 代表連結進 library (*.a) 的物件檔 (obj, *.o) 要採用取代的方式, 也就是說如果 library 已經有這個物件檔的話, 原本的會被刪除 此外, 副選項 i 可以指定要插入那一個物件之前.. 如此的話, 請看下去: 假設 close.c 產生 close.o, 在 libstd.a 裡面是 open/close 函式群(也就是想要取代的函式群)最先被看到的物件檔 (通常連結時如果有按照檔名順序的話應該是如此, 笑) 關於怎麼看, 可以用 binutils 的 nm 這個程式來看 .a 和 .o 的內容. 所以後面這個指令 ar -ri close.o ../../lib/libstd.a *.o 可以把目前目錄下的 *.o 插到 ../../lib/libstd.a 裡面的 close.o 之前, 並且把原先的 *.o 都刪除掉, 當然是有同名的才刪除, (註: libstd.a 已經由 -rc 參數先建立完成了, 包含所有的物件檔) ar 的其它命令請參見, 我也是看這裡的.. http://sourceware.org/binutils/docs-2.16/binutils/ar-cmdline.html#ar-cmdline 最後連結成執行檔的時候因為先找到我們的函式.. 所以原本的函式就沒用到了.. 成功.. 最後為什麼要取代 open, close 這些基礎到與作業系統相關的函式, 因為是嵌入式系統, 沒有OS.. 原本的 open, close 只有 dummy function (空的啦) 目前想要用 memory file system 來當作檔案系統. 希望能有標準的 block file I/O 函式群, 這樣 porting 一些函式庫就會方便一點.. 嘻嘻.. 以上是自問自答 如果還有更好或更正規的方法歡迎高手指教.. 感謝感謝.. 寫了一大堆... Orz.. franky -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.37.44

05/09 22:52, , 1F
如果是這樣,LD_PRELOAD 會不會更好?_?
05/09 22:52, 1F

05/09 23:13, , 2F
我覺得避免重覆的函式可能比較好耶~ 但是此文作可以參考
05/09 23:13, 2F

05/10 21:39, , 3F
是靜態連結所以用ar不是用ld..
05/10 21:39, 3F
文章代碼(AID): #14O8-B05 (C_and_CPP)
文章代碼(AID): #14O8-B05 (C_and_CPP)