2013-08-02 26 views
2

我遇到了QT5和Android的問題。我想使用的libpurple(感謝GoogleSummerOfCode)的交叉編譯,但它是不是打包的APK和Java拋出QT5 Android不包裝版本化的SharedObject

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,改名並不能改變什麼,如果我將此鏈接複製到android lib文件夾中,將其忽略(僅包含.so庫)。即使我將它重命名爲libpurple.so,它也不起作用,因爲libpurple.so.20似乎在二進制文件中被硬編碼。

+0

你有什麼在你的android/res/values/libs.xml爲bundled_libs? –

回答

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