前馈科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 279|回复: 0

gcc改变链接顺序

[复制链接]

97

主题

97

帖子

539

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
539
发表于 2023-11-6 17:22:57 | 显示全部楼层 |阅读模式
问题原型:
  1. OBJ  =  Load.o serial.o dbgput_nof.o $(RES)

  2. LINKOBJ = Load.o serial.o dbgput_nof.o -Ttext=0x40000000 -nostartfiles -n -N -T linksparc.ld stack.ld $(RES)

  3. $(BIN): $(OBJ)
  4.                 $(LD) $(LINKOBJ) -o "Load.exe" $(LIBS)
复制代码
我们想调整 Load.o serial.o的链接顺序,很容易,只需改为如下即可:
  1. OBJ = serial.o Load.o dbgput_nof.o $(RES)

  2. LINKOBJ = serial.o Load.o dbgput_nof.o -Ttext=0x40000000 -nostartfiles -n -N -T linksparc.ld stack.ld $(RES)

  3. $(BIN): $(OBJ)
  4.            $(LD) $(LINKOBJ) -o "Load.exe" $(LIBS)
复制代码
但是我们想$(LIBS)中某个库链接到最前面该怎么做呢?
  1. $(BIN): $(OBJ)
  2.                      $(LD) $(LIBS) $(LINKOBJ) -o "Load.exe"
复制代码
上述改法将会报错。
正确的改法应该在.ld链接命令文件中改:
  1.   .text :
  2.   {
  3.     CREATE_OBJECT_SYMBOLS
  4.     text_start = .;
  5.     _text_start = .;   
  6.     *(.text)
  7.     . = ALIGN (16);

  8.     *(.eh_frame)
  9.     . = ALIGN (16);
  10.    
  11.     _rodata_start = . ;
  12.     *(.rodata*)
  13.   /*  *(.gnu.linkonce.r*) */
  14.     _erodata = ALIGN( 0x10 ) ;

  15.     etext = ALIGN(0x10);
  16.     _etext = .;
  17.     *(.init)
  18.     *(.fini)
  19.     *(.lit)
  20.     *(.shdata)
  21.     . = ALIGN (16);
  22.     _endtext = .;
  23.   } >ram
复制代码


例如,我们想让$(LIBS)中的libTask.a链接到最前面,我们应该这样改
  1. .text :
  2. {
  3. CREATE_OBJECT_SYMBOLS
  4. text_start = .;
  5. _text_start = .;
  6. libTask.a(.text)
  7. *(.text)
  8. . = ALIGN (16);

  9. *(.eh_frame)
  10. . = ALIGN (16);
  11.    
  12.     _rodata_start = . ;
  13. *(.rodata*)
  14. /* *(.gnu.linkonce.r*) */
  15. _erodata = ALIGN( 0x10 ) ;

  16. etext = ALIGN(0x10);
  17. _etext = .;
  18. *(.init)
  19. *(.fini)
  20. *(.lit)
  21. *(.shdata)
  22. . = ALIGN (16);
  23. _endtext = .;
  24. } >ram
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|计算机控制

GMT+8, 2024-4-29 15:59 , Processed in 0.050834 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表