「みんな教えて! 選手権!!」開催のお知らせ

[環境]
Linux version 2.6.9-67.EL
gcc version 3.4.6 (Red Hat 3.4.6-8))

以下のように、OpenSSLの共有ライブラリlibcrypto.soをロードする
プログラムを書いているのですが、

------
#include <stdio.h>
#include <dlfcn.h>
#include <errno.h>

void main(void)
{
void* hSO;
hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW);

if( hSO == NULL )
{
printf("%s\n", dlerror());
}
else
{
// 処理
}
}
------

hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW);
で、NULLが返って来てしまいます。

[dlerror内容]
/usr/local/ssl/lib/libcrypto.so: cannot open shared object file: No such file or directory

しかし、このパスには、シンボリックリンクされたlibcrypto.soファイルが存在します。
試しに、同ディレクトリにあるlibcrypto.so.0.9.8mも試しましたが、同じエラーが出力されました。

パスの指定方法に、何か行う必要があるのでしょうか。

A 回答 (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で呼んでみる。これで通るようだと絶対パス指定に問題があるか。

この回答への補足

> パスを/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することが出来ました^^
ありがとうございました^^

補足日時:2010/03/25 13:12
    • good
    • 0

ANo.3です。

ファイル名指定で上手くいったということだとパス指定に対応していない可能性もありますね。
DLL_OPENの仕様を確認してみると良いかもしれません。名前もdlopenと違うので仕様が違うのかもしれません。
    • good
    • 0
この回答へのお礼

-------
void *dlopen(const char *filename, int flag);

filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される。
それ以外の場合、動的リンカは以下の手順(LD_LIBRARY_PATHなど~以下略)
-------

関数仕様を見てみましたが、
「filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される」
と書いてあるので、絶対パスでいけそうなもんですが、何かが駄目なんでしょうね^^;
今、ファイル名だけ書いているので、LD_LIBRARY_PATHを見に行ってくれているのですね。

このたび、ありがとうございました。
Openできたので、次は中身の関数を使えるかを試して見ます。

お礼日時:2010/03/25 14:29

# No such file or directory



パーミッション以前に物が存在しないように思いますね。

以下のようなパスになっているとか・・・

/usr/local/lib/libcrypto.so

この回答への補足

hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW);

と、コールしてるのですが、
違うパスのファイルを読み込みに行く事があるのでしょうか?
(知識薄くて申し訳ないです^^;)

補足日時:2010/03/25 09:47
    • good
    • 0

アクセス権はどうなってますか?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
は、通してるのですが、駄目みたいです^^;

補足日時:2010/03/25 09:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報