7

crosstools-ng を使用して pthread を使用するプログラムをコンパイルしようとしていますが、何らかの理由でリンカーがライブラリを見つけることができません。チェックしたところ、ライブラリは-L引数で指定されたリンクパスにあります。

エラーは次のとおりです。

/home/***/raspberrypi/toolchain/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/../../../.. /arm-unknown-linux-gnueabi/bin/ld: cannot find /lib/arm-linux-gnueabihf/libpthread.so.0

/home/***/raspberrypi/toolchain/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/../../../../arm-unknown-linux-gnueabi/bin/ld: cannot find /usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a

ld がパス内にあるファイルを見つけられないのはなぜですか?

4

3 に答える 3

6

.../usr/lib/arm-linux-gnueabihf/libpthread.so を編集します。

/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/arm-linux-gnueabihf/libpthread.so.0 /usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a )

/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libpthread.so.0 libpthread_nonshared.a )
于 2013-12-17T16:36:59.620 に答える
2

この情報ページを参照してください: https://sourceware.org/binutils/docs-2.24/ld/File-Commands.html#File-Commands

具体的には、INPUT と GROUP の定義を読んでください。

sysroot プレフィックスが設定されていて、ファイル名が「/」文字で始まり、処理中のスクリプトが sysroot プレフィックス内にある場合、ファイル名は sysroot プレフィックスで検索されます。それ以外の場合、リンカーは現在のディレクトリでファイルを開こうとします。見つからない場合、リンカーはアーカイブ ライブラリの検索パスを検索します。コマンド ライン オプションの「-L」の説明を参照してください。

したがって、リンカー スクリプトは次のようになります。

/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/libpthread.so.0 /usr/lib/libpthread_nonshared.a )

...ツールチェーンが sysroot プレフィックスを使用しているため。

sysroot プレフィックスは次の方法で見つけることができます。

<tuple>-gcc -print-sysroot
于 2014-03-19T21:09:10.793 に答える