3

ベンダー提供のクロスコンパイル ツールチェーン (明らかに OpenEmbedded の派生物) を使用すると、サードパーティ (オープン ソース、社内でコンパイル) ライブラリへの絶対パスを埋め込むことができません。次の gcc コマンド ラインを使用します。

arm-linux-gcc test_connect_send.o gprs_connect.o \
    /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgprs_stuff.so \
    /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libpower_supply_stuff.so \
    /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgsm_stuff.so \
    /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libtcp_stuff.so \
    /package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so \
    /package/host/aspl.es/axl-0.5.6/lib/libaxl.so.0  -o test_connect_send

objdump 言います:

Dynamic Section:
  NEEDED      /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgprs_stuff.so
  NEEDED      /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libpower_supply_stuff.so
  NEEDED      /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgsm_stuff.so
  NEEDED      /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libtcp_stuff.so
  NEEDED      libvortex-1.1.so.0
  NEEDED      libaxl.so.0
  NEEDED      libgcc_s.so.1
  NEEDED      libc.so.6

私のベンダーのライブラリにはフル パスがあり、aspl にはありません。また、埋め込まれた名前が、コマンド ラインで指定したものとどのように異なるかに注目してください。理由 (誰が私のパスをいじっているのか) とその解決方法を知りたいです。

ps: RPATH については知っていますが、それは私が探している答えではありません

4

3 に答える 3

1

私の推測では、ベンダー提供のライブラリが SONAME を完全なインストール パスに設定していると思われます。

于 2009-08-02T00:22:17.627 に答える
0

これは古い質問ですが、とにかく可能な回答を追加すると思いました。

あなたが提供した情報に基づいて、指定した aspl ライブラリがソフトリンクであるため、フルパス名が aspl に含まれていない可能性がありますか? たとえば、/package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so で長いリストを作成すると、libvortex-1.1.so.0 へのリンクであることが示されます (フルパス名なし)。

そのため、それでもフル パスを埋め込みたい場合は、リンクされたライブラリではなく、実際のライブラリへのフル パスを使用する必要があります。

于 2009-11-10T14:10:27.090 に答える