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
ありがとうございました