0

私がやろうとしているのは、画像からいくつかのシンボルを抽出し、別の画像から(リンク)シンボルを使用することです。

armccc/armlink で --symdefs= を指定すると、シンボルとそのア​​ドレスを含むファイルが作成されます。
一方、未使用のシンボルを削除すると、既存のシンボルが更新されるだけです。このファイルをコンパイルに含めると、以前のイメージのシンボルが新しいイメージにリンクされます。

しかし、GNU ツールチェーン (arm-none-eabi-) の同様のアプローチを見つけることができません。arm-none-eabi-nm を使用すると、armcc --symdefs オプションのようなシンボル リストが作成されますが、このシンボル リストを 2 番目のイメージ コンパイルで使用する方法が見つかりません。(また、grep なしでシンボルをフィルタリングする方法はありません)。

他のオプションも arm-none-eabi-objcopy を使用しているようですが、2 番目の画像コンパイルでも使用する方法が見つかりませんでした。

GNU ツールチェーンでは、どうすればそれができるのでしょうか? 何か案が?

一方で、できればKeil uVision IDEにも適用したい。ありがとう。

4

1 に答える 1

1

armcc についてよく知らないので、標準の GNU ツールを使用してこの動作をエミュレートするのは非常に簡単かもしれません。たとえば、symdef ファイルを生成するには:

$ cat tmp.c
int foo() { return 0; }
int bar() { return 1; }
int main() { return 0; }
$ gcc tmp.c
$  readelf -sW a.out | grep GLOBAL | awk '{print $8 " " $2 }' | grep -v '^_' > symdef.lst

そして、それを使用して、--defsymフラグを介してリンカーの不足しているシンボルを定義します。

$ LDFLAGS=$(cat symdef.lst |  awk '{print "-Wl,--defsym=" $1 "=" $2}' | tr '\n' ' ')
$ echo $LDFLAGS
-Wl,--defsym=bar=0000000000400481 -Wl,--defsym=foo=0000000000400476 -Wl,--defsym=main=000000000040048
于 2017-01-02T18:25:23.607 に答える