2

QT5 と Android で問題が発生しています。libpurple のクロスビルドを使用しようとしています (GoogleSummerOfCode に感謝します) が、apk と Java スローにパックされていません。

E/AndroidRuntime( 1496): java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1937]: 1725 could not load needed library 'libpurple.so.20' for 'libSimpleChat.so' (load_library[1092]: Library 'libpurple.so.20' not found)

libpurple.so.20は へのシンボリック リンクです。libpurple.so.20.0名前を変更しても何も変わりません。このリンクを androidlibフォルダーにコピーすると、無視されます (.soライブラリのみがパッケージ化されます)。に名前を変更しても、バイナリにハードコードされているように見えるlibpurple.soため、機能しません。libpurple.so.20

4

1 に答える 1

0

同様の問題があり、共有ライブラリをバージョン管理されていない soname で再コンパイルすることで解決しました。

共有ライブラリの soname を確認します。

$objdump -x libpurple.so | g 'SONAME'

次のように表示されます。

SONAME    libpurple.so.20

ライブラリを再構築し、バージョン管理されていない soname を指定します。

arm-linux-androideabi-gcc -shared -fPIC .... \
    -Wl,-soname,libpurple.so -o libpurple.so

これで、共有ライブラリにはバージョン管理されていない soname が必要になります。

$objdump -x libpurple.so | g 'SONAME'
    SONAME    libpurple.so

この共有ライブラリを独自のライブラリにリンクすると、バージョン管理されていないライブラリ名が使用されます。

$objdump -x libSimpleChat.so | g 'NEED'
    NEEDED    libpurple.so
于 2013-10-09T08:22:01.340 に答える