Cで共有ライブラリを作成しています。このライブラリはlibjpegとX apiに依存しています。 Ubuntu 18.04オペレーティングシステムでビルドし、次のコマンドを使用してビルドしましたgcc mycode.c -o libname.so --shared -lX11 -lXss -lXExt -ljpeg -fPIC
。
Debian OSなどのDebianベースのオペレーティングシステムでこのライブラリを使用したいと思います。 Debian 9.9でこのライブラリの関数を呼び出すと、例外が発生しますUnable to load a file libname.so or one of it's dependencies
。しかし、Debianで同じコマンドを使用してこのCコードをビルドし、さらに使用すると、すべてがうまく機能します。
私の考えでは問題はライブラリファイルUbuntuでは次のファイルを使用しているためライブラリファイルしかし、Debianには同じ名前のライブラリはありません。libjpeg - ターボ。
Ubuntuでライブラリを構築し、他のDebianベースのシステムで使用する方法を理解するのに役立ちます。
また、私はLinuxディストリビューションとディストリビューションの違いについての専門家ではなく、私がやろうとしていることが不可能な場合は時間を無駄にして申し訳ないことをお伝えしたいと思います。
答え1
これを行うとき:
ldd path/to/your/libname.so
Debian システムでは、ldd
ライブラリがリンクされていると思うものと、ld.so がリストされたライブラリを確認/検索できるかどうかが表示されます。
これにより、実際の問題が何であるか、Debianシステムにどの依存関係/ライブラリが欠落しているかを伝えます。
より良い方法は次のとおりです。
ldd path/to/the/executable_that_links_to_libname
これは、上記で省略した情報をあなた(そしてここにいる私たち)に示すためです。