Re: [問題] gcc 下編譯同名函式..
> 一是 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
05/09 22:52, 1F
推
05/09 23:13, , 2F
05/09 23:13, 2F
→
05/10 21:39, , 3F
05/10 21:39, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章