web-dev-qa-db-ja.com

gcc-/ usr / bin / ldエラー:ldconfigがリストし、ld.so.confにパスを追加しても、/ usr / local / libで<library>が見つかりません

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

ソフトウェアのコンパイルは、リンクするステップで失敗します。

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

g ++はデフォルトで/usr/local/libを検索しないようです。clang++と同じです

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

しかし、事実は/usr/local/libが私の/etc/ld.so.confにあり、ldconfigをルートとして実行しましたが、実際にldconfig -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を追加すると、もちろん問題は解決しますが、目標は構成ファイルを使用することです

13
allan.simon

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

メイクファイルで-Lスイッチを指定することは、この問題に対処する一般的な方法ですが、デフォルトのGCC spec file を変更することで実際にシステム全体の変更を行うことができます。コンパイラ、リンカなどに渡す追加オプション。特定の問題に対処するためにこれを行ったことがありますが、それはかなり前のことなので、残念ながら特定の例を挙げることはできません。

1
jjlin

1、リンカースクリプトを使用して、search_dirに「/ usr/local/lib」を追加できます。これを参照してください Linker_Scripts 詳細を取得します。

2、/ usr/local/libをGCC_EXEC_PREFIXシェル環境に追加し、再試行します。詳細は、g ++の「man」でprint-search-dirsを検索してください。

ただ提案、それはまだ試していません。

0
liuyang1