On 6 June 2012 10:12, DamienDaG wrote: > > > > Václav Zeman wrote: >> >> On 6 June 2012 09:27, DamienDaG wrote: >>> >>> Hi >>> >>> I'm trying to build a very simple project composed of one source file and >>> a >>> linker script : >>> >>> file f1.c : >>> #include <stdio.h> >>> >>> extern void fct1_wrongname(); >>> >>> void fct9() >>> { >>> printf("I'm fct9\n"); >>> } >>> >>> int main( int argc, char** argv) >>> { >>> fct1_wrongname(); >>> return 0; >>> } >>> end of file f1.c >>> >>> This file is compiled with command : >>> gcc -O0 -xc -g -Wall -c f1.c -of1.o >>> then build with : >>> ld -T'Link.cmd' -O0 -Map out.map -o rename.exe f1.o >>> >>> file Link.cmd contains : >>> >>> fct1_wrongname = fct9 ; >>> >>> end of file Link.cmd >>> >>> >>> Function fct1_wrongname doesn't exist, and I want to replace the call of >>> this function by a call of fct9. >>> >>> I always get this error message : >>> Link.cmd:4: undefined symbol `fct9' referenced in expression >>> >>> I need to use a linker script (here Link.cmd) to apply this to a larger >>> project, and I can't use symbol definition (i.e. -D"fct1_wrongname=fct9") >>> because there are to many symbols. >>> I've been looking for a solution for a long time, but I couldn't find >>> anything. >> Is it possible that the linker script should contain leading >> underscores for the symbols? E.g., _fct1_wrongname=_fct9? Take a look >> at nm -AB output for the f1.o file. >> >> -- >> VZ >> >> > > I tried many combinations with/without leanding underscores : > with > _fct1_wrongname = fct9 ; > I get > Link.cmd:4: undefined symbol `fct9' referenced in expression > > with > _fct1_wrongname = _fct9 ; > and > fct1_wrongname = _fct9 ; > I get > ld: BFD 2.13 assertion fail ../../src/bfd/stabs.c:783 > > nm -AB f1.o outputs : > $ nm -AB f1.o > f1.o:00000000 b .bss > f1.o:00000000 d .data > f1.o:00000000 N .stab > f1.o:00000000 N .stabstr > f1.o:00000000 t .text > f1.o: U ___main > f1.o: U __alloca > f1.o: U _fct1_wrongname > f1.o: U _fct2 > f1.o:00000012 T _fct9 > f1.o:0000002a T _main > f1.o: U _printf I think I do not entirely understand your use case but wouldn't using the alias attribute (see http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html#Function-Attributes) do what you want? -- VZ