1. ホーム
  2. linux

[解決済み] 共有ライブラリの読み込み中のLinuxエラー:共有オブジェクトファイルを開くことができません。そのようなファイルやディレクトリはありません

2022-03-21 01:21:31

質問

プログラムはXenomaiテストスイートの一部で、Linux PCからLinux+Xenomai ARMツールチェーンにクロスコンパイルされています。

# echo $LD_LIBRARY_PATH                                                                                                                                          
/lib                                                                                                                                                             
# ls /lib                                                                                                                                                        
ld-2.3.3.so         libdl-2.3.3.so      libpthread-0.10.so                                                                                                       
ld-linux.so.2       libdl.so.2          libpthread.so.0                                                                                                          
libc-2.3.3.so       libgcc_s.so         libpthread_rt.so                                                                                                         
libc.so.6           libgcc_s.so.1       libstdc++.so.6                                                                                                           
libcrypt-2.3.3.so   libm-2.3.3.so       libstdc++.so.6.0.9                                                                                                       
libcrypt.so.1       libm.so.6                                                                                                                                    
# ./clocktest                                                                                                                                                    
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory                                 

編集する OK 最後の.1がファイル名の一部であることに気がつきませんでした。ところで、これはどういう意味なのでしょうか?

解決方法は?

更新情報
以下に書くことは、共有ライブラリに関する一般的な回答として正しいのですが、この種のメッセージの最も頻繁な原因は、パッケージをインストールしたのに -dev のバージョンと同じです。


まあ、嘘ではないんですけどね〜。 libpthread_rt.so.1 というリストがあります。 おそらく、あなたが持っているライブラリに依存するように再設定してビルドし直すか、あるいは、あなたが持っているライブラリで libpthread_rt.so.1 .

一般に、.so の後の数字はバージョン番号で、互いにシンボリックリンクになっていることがよくあります。つまり、バージョン 1.1 の libfoo.so があれば、実ファイル libfoo.so.1.0 と、それを指すシンボリックリンク foo.so と foo.so.1 が存在することになるのです。 そして、もう一方のファイルを削除せずにバージョン 1.1 をインストールすると、 libfoo.so.1.1 ができ、 libfoo.so.1 と libfoo.so は新しいものを指すようになりますが、 そのバージョンを必要とするコードはすべて libfoo.so.1.0 ファイルを使うことができるようになります。 バージョン1のAPIに依存するだけで、1.0か1.1かを気にしないコードは、libfoo.so.1 を指定します。 として オリップ がコメントで指摘されていますが、これはよく説明されています。 こちらで .

あなたの場合、あなたは かもしれない シンボリックリンクで済ませる libpthread_rt.so.1 から libpthread_rt.so . しかし、それがあなたのコードを壊さず、あなたのテレビの夕食を食べないという保証はありません。