
[環境]
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も試しましたが、同じエラーが出力されました。
パスの指定方法に、何か行う必要があるのでしょうか。
No.3ベストアンサー
- 回答日時:
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することが出来ました^^
ありがとうございました^^
No.4
- 回答日時:
ANo.3です。
ファイル名指定で上手くいったということだとパス指定に対応していない可能性もありますね。DLL_OPENの仕様を確認してみると良いかもしれません。名前もdlopenと違うので仕様が違うのかもしれません。
-------
void *dlopen(const char *filename, int flag);
filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される。
それ以外の場合、動的リンカは以下の手順(LD_LIBRARY_PATHなど~以下略)
-------
関数仕様を見てみましたが、
「filename がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される」
と書いてあるので、絶対パスでいけそうなもんですが、何かが駄目なんでしょうね^^;
今、ファイル名だけ書いているので、LD_LIBRARY_PATHを見に行ってくれているのですね。
このたび、ありがとうございました。
Openできたので、次は中身の関数を使えるかを試して見ます。
No.1
- 回答日時:
アクセス権はどうなってますか?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
は、通してるのですが、駄目みたいです^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#pragma commentの相対パス指定
-
lvwReport/エラー/プロジェクト...
-
ライブラリについて
-
visual studio community2017 O...
-
BorlandC++Builder5.0でリンカ...
-
OpenSSLの共有ライブラリ(libcr...
-
スタティックライブラリ関係の...
-
静的/動的リンクライブラリにつ...
-
Visual C++ POSIX Thread
-
スタティックライブラリの使い方
-
Radiusのmake時に表示されるエ...
-
DirextXエラー:ファイル'dxerr9...
-
fatal error LNK1104: ファイル...
-
【VS2008 C++】2つのプロジェ...
-
MinGWでOpenMPを使いたいのです...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
fortranでプログラムを実行する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリの使い方
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
【VS2008 C++】2つのプロジェ...
-
インポートライブラリ(.lib)フ...
-
VS2010にて、依存関係とビルド順
-
VC++でビルド時の、リンク警告 ...
-
'd3dx9.lib' が開けません。
-
C++Builder リンカエラーとは?
-
visual studio community2017 O...
-
静的/動的リンクライブラリにつ...
-
スタティックリンクライブラリ...
-
exeファイルはどのdllを参照す...
-
ターボCのライブラリ追加方法
-
MinGWでOpenMPを使いたいのです...
-
VC++6.0からVC++.NET2005へ移植
-
ライブラリのリンクについて
-
VB6/SPREAD6.0 について
-
「MFCを使用しない」から「MFC...
-
error LNK2019: 未解決の外部シ...
おすすめ情報