gcc改变链接顺序
问题原型:OBJ=Load.o serial.o dbgput_nof.o $(RES)
LINKOBJ = Load.o serial.o dbgput_nof.o -Ttext=0x40000000 -nostartfiles -n -N -T linksparc.ld stack.ld $(RES)
$(BIN): $(OBJ)
$(LD) $(LINKOBJ) -o "Load.exe" $(LIBS)
我们想调整 Load.o serial.o的链接顺序,很容易,只需改为如下即可:
OBJ = serial.o Load.o dbgput_nof.o $(RES)
LINKOBJ = serial.o Load.o dbgput_nof.o -Ttext=0x40000000 -nostartfiles -n -N -T linksparc.ld stack.ld $(RES)
$(BIN): $(OBJ)
$(LD) $(LINKOBJ) -o "Load.exe" $(LIBS)但是我们想$(LIBS)中某个库链接到最前面该怎么做呢?
$(BIN): $(OBJ)
$(LD) $(LIBS) $(LINKOBJ) -o "Load.exe"上述改法将会报错。
正确的改法应该在.ld链接命令文件中改:
.text :
{
CREATE_OBJECT_SYMBOLS
text_start = .;
_text_start = .;
*(.text)
. = ALIGN (16);
*(.eh_frame)
. = ALIGN (16);
_rodata_start = . ;
*(.rodata*)
/**(.gnu.linkonce.r*) */
_erodata = ALIGN( 0x10 ) ;
etext = ALIGN(0x10);
_etext = .;
*(.init)
*(.fini)
*(.lit)
*(.shdata)
. = ALIGN (16);
_endtext = .;
} >ram
例如,我们想让$(LIBS)中的libTask.a链接到最前面,我们应该这样改
.text :
{
CREATE_OBJECT_SYMBOLS
text_start = .;
_text_start = .;
libTask.a(.text)
*(.text)
. = ALIGN (16);
*(.eh_frame)
. = ALIGN (16);
_rodata_start = . ;
*(.rodata*)
/* *(.gnu.linkonce.r*) */
_erodata = ALIGN( 0x10 ) ;
etext = ALIGN(0x10);
_etext = .;
*(.init)
*(.fini)
*(.lit)
*(.shdata)
. = ALIGN (16);
_endtext = .;
} >ram
页:
[1]