人間が読めるバックトレースを得るために、SO を libbfd にリンクする必要があります。
-fPIC でコンパイルされていないため、libbfd.a に対する静的リンクは失敗します。そのため、私が理解しているように、実行可能ファイルにのみ参加できます。
libbfd.so へのリンクもいくつかの問題を引き起こしますが。
Ubuntu-14.04 と Debian Wheezy 7.8 の両方でコンパイルする必要があり、それらには交差しない binutils バージョンのセットがあります。特に、Ubuntu には 2.24 があり、Debian には 2.22 と 2.25 があります。そして問題は、gcc がシンボリックリンクの名前 libbfd.so を参照に使用したくないため、代わりに SONAME を使用することです。したがって、依存関係で libbfd-2.24-system.so または libbfd-2.25-system.so のいずれかで終了します。
今のところ、いくつかのアプローチがあります。
リンク中に SONAME をオーバーライドできる隠しフラグがいくつかあります。これは優先パスです
libbfd を手動でコンパイルする以外に方法はありません。私はこれを可能な限り回避します。
私が必要とするすべての手動dlopen + dlsym。
answer gcc link shared library に対して symbolic linkを読みましたが、変更できない SONAME を提案しています。
助言がありますか?
ありがとう。
編集:事実上、Ubuntuリポジトリのすべての静的ライブラリは位置に依存していないようです。理由はわかりません。SONAME をオーバーライドできないため、事態はさらに複雑になります。