我正在尝试使用STARTUP
LD 脚本中的指令将程序与我自己的启动文件链接:
...
ENTRY(_start)
STARTUP(my_crt1.o)
...
GCC 驱动程序用于链接程序(不打扰 libgcc 等库路径):
gcc -T my_script.ld ...
不幸的是,它只适用于为 powerpc 目标编译的 GCC,而 arm 或 i686 目标则不能并且仍然在 collect2 中包含 crt0.o。例如:
arm-eabi-g++ -v -T my_script.ld ...
给我:
collect2 ... /opt/lib/gcc/arm-eabi/4.8.0/../../../../arm-eabi/lib/crt0.o ...
因此:
crt0.S:101: multiple definition of `_start'
似乎该STARTUP
指令被完全忽略(除非指定该指令,否则 powerpc 目标也使用其默认 crt0 STARTUP
)并且无法禁用默认 crt0。
是否有一种可移植的方式来链接另一个启动文件?
我的启动文件使用libgcc
函数(调用ctors和dtors),所以需要crtbegin.o
,crtend.o
等等,所以我想避免-nostartfiles
禁用的选项crt*.o
- 我只需要禁用crt0.o
。
谢谢