
[環境]
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で質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- Ruby 教えてください 2 2023/01/04 17:50
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fatal error LNK1104: ファイル...
-
共有ライブラリへのパス指定の方法
-
VB2008でのDLL作成方法について
-
スタティックライブラリ関係の...
-
音楽再生についてのVC++のプロ...
-
C++によるPostgreSQLの接続
-
静的/動的リンクライブラリにつ...
-
VC++でビルド時の、リンク警告 ...
-
スタティックライブラリの使い方
-
eclipse+MinGWの環境で外部ライ...
-
ShellExecute関数について(初...
-
exeファイルはどのdllを参照す...
-
C++Builder リンカエラーとは?
-
Borlandbcc55とMYSQLのコ...
-
【VS2008 C++】2つのプロジェ...
-
#pragma commentの相対パス指定
-
VCのincludeについて
-
「MFCを使用しない」から「MFC...
-
python エラー
-
エクセルのエラーメッセージ「4...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的/動的リンクライブラリにつ...
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
visual studio community2017 O...
-
【VS2008 C++】2つのプロジェ...
-
C/C++の.libについて教えてくだ...
-
exeファイルはどのdllを参照す...
-
#pragma commentの相対パス指定
-
C++Builder リンカエラーとは?
-
error LNK2019: 未解決の外部シ...
-
スタティックライブラリの使い方
-
音楽再生についてのVC++のプロ...
-
VS2010にて、依存関係とビルド順
-
Visual Studio 2022の『#define...
-
C++によるPostgreSQLの接続
-
スタティックリンクライブラリ...
-
インポートライブラリ(.lib)フ...
-
VC++でビルド時の、リンク警告 ...
-
Makefileと共有ライブラリ
-
dllかlibか
おすすめ情報