空でないコンストラクターを持つグローバル インスタンスの簡単な宣言がいくつかあります。これらのコンストラクターは、起動時に自動的に呼び出されます。Linux 上の C++ をさまざまなマイクロコントローラー ターゲットにクロスコンパイルしています。
はどうかと言うと
- アーム-なし-eabi-gcc-4.8.4
- rx-elf-gcc-4.8-GNURX_v14.03 (GCC 4.8.3)
コンストラクターへの呼び出しはセクションに入れられ.init_array
ます。マップ ファイルは次のようになります。
.init_array 0x00007cb8 0x4 libmotor.o
.init_array 0x00007cbc 0x4 libaudio.o
はどうかと言うと
- mips-elf-gcc-4.8.2
- avr-gcc-4.8.1
- msp430-gcc-4.6.3
これらの呼び出しは.ctors
セクションに入ります:
.ctors 0x000000009d011508 0x4 libmotor.o
.ctors 0x000000009d01150c 0x4 libaudio.o
コンパイルは で行われ-ffunction-sections -fdata-sections
、リンカは を取得し--gc-sections
ました。
すべてのバイナリが機能しますが、すべての呼び出しを同じセクションに入れたいと思います (リンカー スクリプトのメンテナンスを簡素化するため)。
- ターゲット セクションが異なるのはなぜですか?
- コマンド ライン オプションを使用してデフォルト セクションを変更することはできますか?
- コマンド ライン オプションが終了しない場合: GCC コンパイル時にデフォルト セクションを定義することは可能ですか?