2

短い質問: どのように位置をllvm-ld特定しますlibstdc++か?

詳細

次のエラー メッセージが表示されます。

llvm-ld: error: Cannot find library 'stdc++'

実行中llvm-ldllvm-ldを検索する方法を理解しようとしていますlibstdc++

新しいシステムをセットアップし、別のシステムで動作するコンパイル手順に従っています。最終的に、Cadence やその他のさまざまなソフトウェアを含む多数のディレクトリを含む古いシステムにLD_LIBRARY_PATH設定されていた との違いに気付きました。.bashrcを使用したくありません。適切なコマンド ライン パラメータを に指定しLD_LIBRARY_PATHてリンクできるようにしたいのです。libstdc++llvm-ld

私が実行しているコマンドは次のとおりです。

llvm-ld -disable-internalize -native -o foo foo.bc4 -L/usr/lib/x86_64-linux-gnu -lpthread -lrt  -lstdc++ -lm -v

次の出力が得られます。

  Linking bitcode file 'foo.bc4'
  Linked in file 'foo.bc4'
  Linking archive file '/usr/lib/x86_64-linux-gnu/libpthread.a'
  Linking archive file '/usr/lib/x86_64-linux-gnu/librt.a'
llvm-ld: error: Cannot find library 'stdc++'

ただし、実行ls -l /usr/lib/x86_64-linux-gnu/libstdc++*すると次のようになります。

lrwxrwxrwx 1 root root     19 Apr 15 16:34 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ->    libstdc++.so.6.0.16
-rw-r--r-- 1 root root 962656 Apr 15 16:36 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16

llvm-ldでは、なぜこのファイルが見つからないのかわかりませんか? 特に、LD_LIBRARY_PATHセットを使用してコンパイルしldd、結果の実行可能ファイルを実行すると、次の出力が得られるためです。

linux-vdso.so.1 =>  (0x00007ffff7ffe000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffff7dc1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffff7ac0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffff77c6000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffff75b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff71f0000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)

libstdc++これは、私が望むバージョンが であることを示しているようですが、検索パスでそれを見つけられない/usr/lib/x86_64-linux-gnu/libstdc++.so.6理由がわかりません。llvm-ld-L/usr/lib/x86_64-linux-gnu

参考uname -aまでに:結果は次のとおりです。Linux FOO 3.2.0-30-generic #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

そしてllvm-ld --version

LLVM (http://llvm.org/):
  LLVM version 3.1svn
  Optimized build.
  Built Sep 14 2012 (13:22:38).
  Default target: x86_64-unknown-linux-gnu
  Host CPU: core2
4

1 に答える 1

2

を探していないようllvm-ldです.so.#。ページによるとman

-lオプションで指定されたライブラリを探すときは、llvm-ld最初に現在のディレクトリからその名前のファイルをロードしようとします。それが失敗した場合は、、、liblibrary.bcまたはliblibrary.aを 探しliblibraryます。shared library extension、この順序で、-Lオプションを使用してライブラリ検索パスに追加された各ディレクトリ。これらのディレクトリは、指定された順序で検索されます。ライブラリが見つからない場合は、環境変数llvm-ldで指定されたディレクトリを検索します。LLVM_LIB_SEARCH_PATHそこにライブラリが見つからない場合は失敗します。

/usr/lib/x86_64-linux-gnu/libstdc++.soシンボリックリンク->を作成することで、この作業を行うことができますlibstdc++.so.6

私は通常、直接リンクしclangます。これは、C++ライブラリの検索をよりよく理解しているためです。

于 2012-10-28T20:01:43.357 に答える