[環境]
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VCのincludeについて
-
静的/動的リンクライブラリにつ...
-
C言語 コンパイルできない "vi...
-
MP3の再生
-
'd3dx9.lib' が開けません。
-
ライブラリのリンクについて
-
インポートライブラリ(.lib)フ...
-
visual studio community2017 O...
-
dllかlibか
-
fatal error LNK1104: ファイル...
-
python エラー
-
アプリケーションのDLLファイル...
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
dos.hについて
-
適切な変換関数が存在しない???
-
math.hに含まれる関数が使えない
-
fortranでプログラムを実行する...
-
unsigned long long 型のフォー...
-
” OS ビルド ” の意味が分か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
visual studio community2017 O...
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
C++によるPostgreSQLの接続
-
exeファイルはどのdllを参照す...
-
C++Builder リンカエラーとは?
-
【VS2008 C++】2つのプロジェ...
-
'stdafx.h'のエラーに関して
-
静的/動的リンクライブラリにつ...
-
OpenSSLの共有ライブラリ(libcr...
-
lvwReport/エラー/プロジェクト...
-
タイプライブラリのレジストリ...
-
#pragma commentの相対パス指定
-
error LNK2019: 未解決の外部シ...
-
VS2010にて、依存関係とビルド順
-
非GPL版libx264とffmpegビルド
-
dllかlibか
-
スタティックリンクライブラリ...
-
ShellExecute関数について(初...
-
#include <winreg.h>をインクル...
おすすめ情報