私は使用したいライブラリを持っています。私はそれのためのソースコードを持っていないが、それは私が使用したい機能が含まれています。これは通常のx86-64共有オブジェクトで、その中にはいくつかのJNIコードがあり、特別なものはありません。私の問題は、ライブラリがlibm.so
を参照するようになったことです。今起こっていることはかなり奇妙で、私はそれを期待していませんでした。実行しようとすると、libm.so
には無効なELFヘッダーがあることがわかります。libm.so
は実際のライブラリファイルのlibm.so.6
への参照ファイルなので意味があります。Linux共有オブジェクトライブラリのリンク
私の質問は、これを修正する方法です。私は、オペレーティングシステムがそれを正しく処理しないことに本当に驚いています。それは、少なくともいくらかバージョンに依存しないので、すべてのプログラムがlibm.so
を参照し、libm.so.6
ではないからです。
EDIT:私はstrace
とlibm.so
マイライブラリは、Linuxの多くの一般的な標準ライブラリに参照している...氷山の一角であるように思わをしました。そして私はJREでそれを実行しているので、それはJREのディレクトリ内を検索するだけであり、それはまったく間違っています。ライブラリはAndroid Appから取得されているので、元のメイクファイルにはおそらくどちらの意味もないライブラリのパスがあったでしょう...この問題を解決するためにはもう少し分析しなければなりません。
実際のファイルへのシンボリックリンクであるライブラリは、他のシンボリックリンクと同じように動作します。エラーの原因となるその他の問題があるはずです。エラーについては、実際のエラーを完全かつ未編集でコピー・ペーストして質問本体に表示できますか?おそらく、リンクに使用されているコマンドラインも表示されます(これは失敗するリンクですか、プログラムを実行しようとすると失敗しますか?)。 –