2017-01-02 13 views
0

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

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

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

他のオプションもアームなしeabi-objcopyを使用していたようですが、2番目のイメージコンプライアンスでもそれを使用する方法が見つかりませんでした。

GNUツールチェーンでは、どうすればいいのですか?何か案が?

一方、可能であればKeil uVision IDEに適用したいと思います。おかげさまで

答えて

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 
+1

おかげyugr。 GCC用のリンカーオプションが見つかりました。 -Wl、 - just-symbols = これはうまくいくようですが、巨大なelfファイルを使用しています。私はarmccのような共有オブジェクトとそのアドレスを好むでしょう。 – muratcakmak

関連する問題