- ベストアンサー
OpenSSLの共有ライブラリ(libcrypto.so)の動的リンクについて
- OpenSSLの共有ライブラリ(libcrypto.so)をロードするプログラムのNULL返却について
- 指定したパスに存在する共有ライブラリが見つからないエラーの解決方法
- 共有ライブラリのパスの指定方法について
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DLL_OPENってdlopenだよね。 libcrypto.soが参照している別のsoファイルが見つからないとか。 やってみたいこと: 1. RTLD_NOWをRTLD_LAZYにしてみる。これでエラーにならないなら別ファイルが問題だね。 2. LD_LIBRARY_PATHに/usr/local/ssl/libを追加して、パスを/usr/local/ssl/lib/libcrypto.soでなくてlibcrypto.soで呼んでみる。これで通るようだと絶対パス指定に問題があるか。
その他の回答 (3)
- rinkun
- ベストアンサー率44% (706/1571)
ANo.3です。ファイル名指定で上手くいったということだとパス指定に対応していない可能性もありますね。 DLL_OPENの仕様を確認してみると良いかもしれません。名前もdlopenと違うので仕様が違うのかもしれません。
お礼
------- void *dlopen(const char *filename, int flag); filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される。 それ以外の場合、動的リンカは以下の手順(LD_LIBRARY_PATHなど~以下略) ------- 関数仕様を見てみましたが、 「filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される」 と書いてあるので、絶対パスでいけそうなもんですが、何かが駄目なんでしょうね^^; 今、ファイル名だけ書いているので、LD_LIBRARY_PATHを見に行ってくれているのですね。 このたび、ありがとうございました。 Openできたので、次は中身の関数を使えるかを試して見ます。
- entree
- ベストアンサー率55% (405/735)
# No such file or directory パーミッション以前に物が存在しないように思いますね。 以下のようなパスになっているとか・・・ /usr/local/lib/libcrypto.so
補足
hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW); と、コールしてるのですが、 違うパスのファイルを読み込みに行く事があるのでしょうか? (知識薄くて申し訳ないです^^;)
- SaKaKashi
- ベストアンサー率24% (755/3136)
アクセス権はどうなってますか?r-xr-x-r-xですか? 念のためにLD_LIBRARY_PATHに/usr/local/ssl/libを追加してみては。
補足
アクセス権は問題ないようです。 -rw-r--r-- 1 root 3141092 libcrypto.a lrwxrwxrwx 1 root 18 libcrypto.so -> libcrypto.so.0.9.8* -r-xr-xr-x 1 root 1756663 libcrypto.so.0.9.8* LD_LIBRARY_PATHに/usr/local/ssl/lib は、通してるのですが、駄目みたいです^^;
補足
> パスを/usr/local/ssl/lib/libcrypto.soでなくて > libcrypto.soで呼んでみる。 で、Openすることが出来ました! 絶対パス指定に問題...。ということは、プログラム "/usr/local/ssl/lib/libcrypto.so" の指定方法が、 何かしらまずいのか...。もしかして、 /usr/local/ssl/lib/usr/local/ssl/lib/libcrypto.so を見に行っているとか?(それはないですかね^^;) 何でだろう...。 でも、libcrypto.soをOpenすることが出来ました^^ ありがとうございました^^