私のアプリケーションは、外部スタティックライブラリに配置されたいくつかの関数を呼び出します。私は外部スタティックライブラリを自分のアプリケーションにリンクし、すべてのものが動作します(この場合、私はGCCを使用しています)。外部スタティックライブラリのセグメントを特定の場所に配置します
しかし、ライブラリのテキスト、.data、および.bssセクションの場所(アドレス)は、リンカーによって選択されます。私はリンカスクリプトを変更して場所を選択/変更することができますが、ライブラリのすべての関数、変数などを指定する必要があるので面倒です。私はそれはのようなものです意味:
. = 0x1000; /* new location */
KEEP(*(.text.library_function1));
KEEP(*(.text.library_function2));
[...]
代替ソリューションは、各関数/変数のセクション属性を配置した後、再配置するセクション全体でリンカを変更することで、外部ライブラリを構築することです。ような何か:
/* C source file */
unsigned char __attribute__((section (".myLibrarySection"))) variable1[10];
unsigned char __attribute__((section (".myLibrarySection"))) variable2[10];
/* Linker script */
. = 0x1000;
KEEP(*(.myLibrarySection))
しかし、私はこれらのトリックを使用する必要がなく、全体の.text、.dataセクションおよび外部静的ライブラリの.bssのセグメントを再配置できるようにしたいと思います。
私は(リンカスクリプトで)このような何か希望:
. = 0x1000;
KEEP(*(.text.library_file_name))
はGCCツールチェーンを使用して、それは可能ですか?
他のツールチェーン(IAR、Keilなど)を使用することは可能ですか?