作者frankyhcg (参四)
看板C_and_CPP
标题Re: [问题] gcc 下编译同名函式..
时间Tue May 9 21:12:32 2006
> 一是 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
1F:推 luvin:如果是这样,LD_PRELOAD 会不会更好?_? 05/09 22:52
2F:推 drkkimo:我觉得避免重覆的函式可能比较好耶~ 但是此文作可以参考 05/09 23:13
3F:→ frankyhcg:是静态连结所以用ar不是用ld.. 05/10 21:39