14

手動でコンパイルして /usr/local/lib にインストールしたライブラリを使用して、C++ コードをコンパイルしようとしています。

リンク手順でソフトウェアのコンパイルが失敗します。

 /usr/bin/ld: error: cannot find -lcppdb

g++ はデフォルトで を検索しないようです/usr/local/libclang++

 g++ -print-search-dirs # does not show /usr/local/lib

ただし、事実は/usr/local/lib私の中にあり、ルートとして/etc/ld.so.conf実行しましたが、実際に実行すると表示されますldconfigldconfig -p | grep cppdb

libcppdb_sqlite3.so.0 (libc6) => /usr/local/lib/libcppdb_sqlite3.so.0
libcppdb_sqlite3.so (libc6) => /usr/local/lib/libcppdb_sqlite3.so
libcppdb.so.0 (libc6) => /usr/local/lib/libcppdb.so.0
libcppdb.so (libc6) => /usr/local/lib/libcppdb.so

もちろんオプションを追加-L/usr/local/libすると問題は解決しますが、目標は構成ファイルを使用することです

4

3 に答える 3

10

ld、リンカーは、そのために外部構成ファイルを使用しません。ldconfigローダー用ld.soです。リンカーの値をどこかに設定する場合は、makefile を作成します。

于 2013-11-02T01:40:35.493 に答える
1

Makefile でスイッチを指定することは、この問題に対処するための一般的な方法ですが、実際にはデフォルトの GCC仕様ファイル-Lを変更することでシステム全体の変更を行うことができます。これを使用して、コンパイラ、リンカーなどに渡す追加オプションを指定できます。 . 特定の問題に対処するために過去にこれを行ったことがありますが、かなり前のことなので、残念ながら具体的な例を示すことはできません。

于 2013-11-04T18:22:38.043 に答える
-2
  1. リンカー スクリプトを使用して、「/usr/local/lib」を search_dir に追加できます。詳細については、このLinker_Scriptsを参照してください。

  2. /usr/local/lib を GCC_EXEC_PREFIX シェル環境に追加して、もう一度試してください。詳しくは g++ の man で print-search-dirs を検索してください。

単なる提案で、まだ試していません。

于 2013-11-02T02:38:43.290 に答える