0

gstreamer に関連するプロジェクトをクロス コンパイルするのに非常に問題があります。クロスコンパイルマシンのライブラリにリンクしようとしています/usr/lib

標準のリンカ フラグ-L{FILESYS_DIR}/usr/lib -lGLESv2を実行すると、クロス コンパイル ツールチェーンから pthread の苦情が発生します。したがって、-Lフラグを使用せずにこのライブラリにリンクしようとしています。

私が何をしても、私は取得していますundefined symbol glFramebuffer2D. しかし、簡単readelf -Wc $FILESYS_DIR/usr/lib/libGLESv2.so | glFrameに glFramebuffer2D シンボルが表示されます。

autoconf に指定するフラグに関係なく、アプローチを使用しない限り、libtool と呼ばれるものがリンク要求を破棄するため、髪を引っ張っています-L -l...

編集: 別のアイデアが-Wl, $FILESYS_DIR/usr/lib/libGLESv2.soありました。コンパイルとリンクでは機能しましたが、実行時では機能しませんでした...ホストマシンのルートは$ FILESYS_DIRであるため、(今では)明らかです。とにかく、これは正しいアプローチですが、相対名が必要だと思います。


libtool: link:  arm-none-linux-gnueabi-gcc -shared  .libs/libgstbla_la-gstblaoverlay.o
  .libs/libgstbla_la-gstblastabilize.o .libs/libgstbla_la-gles2_utilities.o   -Wl,-
  rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -Wl,-rpath -
  Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -L/home/z3/z3-
  netra/filesys/fs/opt/gstreamer/lib /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgstbase-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgstreamer-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgstvideo-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgobject-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgmodule-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libgthread-2.0.so -lrt /home/z3/z3-netra/filesys/fs//opt/gstreamer-
  0.4/lib/libglib-2.0.so    -pthread -Wl,-soname -Wl,libgstbla.so -Wl,-version-script -
  Wl,.libs/libgstbla.ver -o .libs/libgstbla.so

必要に応じて、同様に 1 行で:

libtool: link:  arm-none-linux-gnueabi-gcc -shared  .libs/libgstbla_la-gstblaoverlay.o .libs/libgstbla_la-gstblastabilize.o .libs/libgstbla_la-gles2_utilities.o   -Wl,-rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -Wl,-rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -L/home/z3/z3-netra/filesys/fs/opt/gstreamer/lib /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstbase-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstreamer-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstvideo-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgobject-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgmodule-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgthread-2.0.so -lrt /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libglib-2.0.so    -pthread -Wl,-soname -Wl,libgstbla.so -Wl,-version-script -Wl,.libs/libgstbla.ver -o .libs/libgstbla.so
4

2 に答える 2

0

/usr/libすでにライブラリ検索パス上にあるはずなので、RPATHを指定する必要はありません。ただし、必要なことは、(クロス)リンカーにライブラリの場所を指示することです。これには、libpthreadなどの推移的な依存関係が含まれていると思います。あります$FILESYS_DIR/usr/lib/libpthread.soか?それは指し示してい/lib/libpthread.so.Nますか?ちょっと待ってください。書き留めたところに何かが表示されます。そこに(おそらく)存在しないことに注意し$FILESYS_DIRてください。リンカーがlibGLESv2で推移的に必要なlibpthreadを探している可能性がありますが$FILESYS_DIR/lib、ライブラリのインクルードパスにないため、見つかりません。 。リンカフラグに追加-L $FILESYS_DIR/libして、再試行してください。

于 2012-09-08T01:07:13.643 に答える
0

すべて、これは次の質問に関連していました:グローバルgccのデフォルトの検索パスを設定します

ここでの問題は、pthread.so(またglib.so)に関連しています。多くのシステムの/usr/lib/pthread.soはASCIIスクリプトであり、システムの/lib/pthread.so.0(ソフトリンク)にさらにリンクします。コンパイル時、私の$(FILESYS_DIR)は正しかったが、libpthread.soはホストシステムpthread.soを指していた。

私はここで大きな間違いを犯しましたが、これは正しいクロスコンパイル管理で簡単に回避できたはずです。ターゲットシステム用にコンパイルするときは、ターゲットシステムファイルシステム上のファイルを使用しないでください(私のようにNFSの場合)。そのターゲットシステム用にコンパイルされたローカルライブラリを使用してください。さらに、指定します-Wl,-rpath-link=/[local location where your *.so reside]

そのコンパイラ/リンカフラグにより​​、コンパイルおよびリンク中にランタイムパスをローカルシステム上に置くことができますが、実行時に標準のランタイムパスを維持できます。

于 2012-09-10T16:51:30.047 に答える