我試圖通過在LD腳本STARTUP
指令的程序用我自己的啓動文件鏈接:與另一啓動文件鏈接
...
ENTRY(_start)
STARTUP(my_crt1.o)
...
GCC驅動程序用於程序鏈接(不要與庫路徑libgcc的一樣,等)理會:
gcc -T my_script.ld ...
不幸的是,它只是編譯爲PowerPC目標的GCC的作品,而手臂或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
功能(打電話給構建函數和dtors),因此crtbegin.o
,crtend.o
等需要,所以我想避免-nostartfiles
選項,禁用crt*.o
- 我只需要禁用crt0.o
。
謝謝
我是在做夢另一種解決方案:(在這種情況下,你怎麼能知道如果目標libgcc的需要crti.o或crtn.o? –
它並不能解釋爲什麼它可以與powerpc的交叉工具一起工作 –
這可能是power pc的交叉工具會默默地忽略重複的符號,並且更喜歡你明確提供的那些。一個預感 – parvus