GNU g++
を使用してC++アプリケーションをコンパイルしています。プロジェクトはOpenSSLライブラリを利用しています。
私のマシン(64ビットCentOSクアッドコア)で、ファイルをコンパイルしてリンクします。
g++ -g -c -L/usr/local/lib/ -L/usr/lib64/
-I/usr/local/include/ -I/usr/local/ssl/include/
-lcrypto mysrc1.cpp mysrc2.cpp mysrc3.cpp
g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto
*.o -o ./myapp.out
私のアプリケーションでは、MD5
に含まれる関数libcrypto.so
を使用しています。ご覧のとおり、g++
、-L
オプションを使用して検索するディレクトリと、-I
オプションで検索するライブラリを-l<lib-name>
に指定しています。もちろん省略できる/usr/local/lib
のような簡単なパスもありますが、makefileがパラメトリックであるため指定しました。
私の問題は、自分のものを正常にコンパイルできることです(最初のコマンド)しかしリンクは失敗します(2番目のコマンド):
/ usr/bin/ld:-lcryptoが見つかりません
collect2:ldが1つの終了ステータスを返しました
make:*[cppsims_par]エラー1
しかし、私はフォルダとすべてをチェックしました... libcrypto.so
は/usr/lib64/
の中にあります。何が起こっている?
ファイルの検索に失敗した理由をstraceで確認すると役立つ場合があります
strace -f -e trace=file g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto
*.o -o ./myapp.out
私は問題を見つけました、そしてそれはこの質問に関連しています: ldは既存のライブラリを見つけることができません
実際にはシンボリックリンクがありませんでしたlibcrypto.so
そしてコンパイラはライブラリを見つけることができませんでした...