私も手動でコンパイルして/ 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
を追加すると、もちろん問題は解決しますが、目標は構成ファイルを使用することです
リンカであるld
は、そのための外部構成ファイルを使用しません。 ldconfig
はローダー用、ld.so
。リンカーの値をどこかに設定する場合は、メイクファイルを作成します。
メイクファイルで-L
スイッチを指定することは、この問題に対処する一般的な方法ですが、デフォルトのGCC spec file を変更することで実際にシステム全体の変更を行うことができます。コンパイラ、リンカなどに渡す追加オプション。特定の問題に対処するためにこれを行ったことがありますが、それはかなり前のことなので、残念ながら特定の例を挙げることはできません。
1、リンカースクリプトを使用して、search_dirに「/ usr/local/lib」を追加できます。これを参照してください Linker_Scripts 詳細を取得します。
2、/ usr/local/libをGCC_EXEC_PREFIXシェル環境に追加し、再試行します。詳細は、g ++の「man」でprint-search-dirsを検索してください。
ただ提案、それはまだ試していません。