お世話になっております.
今回共有ライブラリを使ったプログラムを作成したいと思い,
サンプルを作りましたがうまくいきませんでした.
以下に詳細を記載します.
ldd.h
ldd.hpp
ldd_sample.cpp
実装環境
VMWare Lubunt
コンパイル
% g++ -shared -fpic -x c++ ldd.hpp -o libldd.so
% g++ ldd_sample.cpp -lldd -L .
実行結果
% ./a.out
./a.out: error while loading shared libraries: libldd.so: cannot open shared object file: No such file or directory
% ldd a.out
linux-vdso.so.1 => (0x00007ffd15356000)
libldd.so => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efef38e3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efef3519000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efef3211000)
/lib64/ld-linux-x86-64.so.2 (0x00007efef3bf2000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efef2ffb000)
ldd_Sampleからsay()関数を実行したいです.
ですが,上記の結果を見ていただければ分かるように,
libldd.so => not found
となっています.
この対処法を調べましたところ,LD_LIBRARY_PATH環境変数を設定すればいいということでした.
ですので,libldd.soがあるフォルダを設定しました.
% echo $LD_LIBRARY_PATH
/home/myname/Desktop/c++_sample
ですが,ldd a.out の結果は変わりませんでした.
自分では何が問題なのかが分かりません.
皆さんのお力をお借りいただければ幸いです.
よろしくお願いいたします.
共有ライブラリについて質問
Re: 共有ライブラリについて質問
「/home/myname/Desktop/c++_sample」に 「libldd.so」ファイルが存在しないとしか思えません。
以下を確認してみてください。
①: 本当に「/home/myname/Desktop/c++_sample」に 「libldd.so」ファイルはありますか?
$ ls /home/myname/Desktop/c++_sample | grep libldd.so
②: libldd.so と a.out を同じディレクトリに配置して以下のコマンドで実行できますか?
$ LD_LIBRARY_PATH=. ./a.out
③: ①と②が真だった場合、以下で実行できますか? (a.out を配置しているディレクトリで実行してください)
$ export LD_LIBRARY_PATH="/home/myname/Desktop/c++_sample"
$ echo $LD_LIBRARY_PATH
$ ldd a.out
$ ./a.out
④: ①が真、③が偽だった場合、LD_LIBRARY_PATH をどうやって(もしくはどこに記述して)設定したのか教えてください。
以下を確認してみてください。
①: 本当に「/home/myname/Desktop/c++_sample」に 「libldd.so」ファイルはありますか?
$ ls /home/myname/Desktop/c++_sample | grep libldd.so
②: libldd.so と a.out を同じディレクトリに配置して以下のコマンドで実行できますか?
$ LD_LIBRARY_PATH=. ./a.out
③: ①と②が真だった場合、以下で実行できますか? (a.out を配置しているディレクトリで実行してください)
$ export LD_LIBRARY_PATH="/home/myname/Desktop/c++_sample"
$ echo $LD_LIBRARY_PATH
$ ldd a.out
$ ./a.out
④: ①が真、③が偽だった場合、LD_LIBRARY_PATH をどうやって(もしくはどこに記述して)設定したのか教えてください。
Re: 共有ライブラリについて質問
sleep さん
返信ありがとうございます.
ご指摘いただきました項目について,
回答させて頂きます.
1.ldd.soが存在するのか
% ls /home/myname/Desktop/c++_sample | grep libldd
libldd.so
存在しました.
2.同じディレクトリにおいて実行できるのか
% LD_LIBRARY_PATH=. ./a.out
hello
無事実行できました.
3.提示していただきました方法で実行できました.
今回の問題の原因は,シェルの変数の設定を
LD_LIBRARY_PATH=/home/myname/Desktop/c++_sample
としているだけで,exportをしていませんでした.
問題は解決したのですが,最後にひとつ質問させていただきたいです.
このコマンドはどういう意味でしょうか?
変数の設定かと思いましたが,a.outも実行されていましたので,
疑問に思いました.
回答いただければ幸いです.
よろしくお願いします.
返信ありがとうございます.
ご指摘いただきました項目について,
回答させて頂きます.
1.ldd.soが存在するのか
% ls /home/myname/Desktop/c++_sample | grep libldd
libldd.so
存在しました.
2.同じディレクトリにおいて実行できるのか
% LD_LIBRARY_PATH=. ./a.out
hello
無事実行できました.
3.提示していただきました方法で実行できました.
今回の問題の原因は,シェルの変数の設定を
LD_LIBRARY_PATH=/home/myname/Desktop/c++_sample
としているだけで,exportをしていませんでした.
問題は解決したのですが,最後にひとつ質問させていただきたいです.
このコマンドはどういう意味でしょうか?
変数の設定かと思いましたが,a.outも実行されていましたので,
疑問に思いました.
回答いただければ幸いです.
よろしくお願いします.
Re: 共有ライブラリについて質問
sleep さん
回答ありがとうございます.
Linuxに関して知識が不足しているということを感じました.
今後も勉強していきたいと思います.
回答ありがとうございます.
Linuxに関して知識が不足しているということを感じました.
今後も勉強していきたいと思います.