obj文件的relocation与symbol问题。

acguy 2005-06-20 07:45:18
c/cpp编译成obj文件时,编译器把所有函数调用(如果没有static关键字),全局变量,外部变量,都用relocation的方法来解决。

现已有多个obj文件,要将其合并成一个obj,但要将在此文件范围内可找到的重定位全部予以定位。
举例:a.cpp中有调用b.cpp 中的function();
那么a.obj中就有一个call relocationxxx 指令。重定位表中就记录了这个重定位。同时b.obj中符号输出表就有function符号。

现合并后,该指令改为call relate-address-to-funtion, 重定位表中就删除该重定位,同时输出表中删除function

大虾们指点一二。
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
acguy 2005-06-21
  • 打赏
  • 举报
回复
不好意思,是假象.
如果还有其它unresolved symbol, 链接无法成功.
如果用ld -r选项, function还是未定位.
yjh1982 2005-06-20
  • 打赏
  • 举报
回复
obj应该有个section专门用来重定位吧
acguy 2005-06-20
  • 打赏
  • 举报
回复
linux下问题已解决。
用ld -o c.o a.o b.o (有一个警告:cannot find entry symbol _start,
无法链接到入口函数)
生成的c.o中function已重定位,然后用strip --strip-symbol=function把
function的符号去掉。

但是windows下的vc++6.0还是无解中........................

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧