QT5 Android未打包版本化的SharedObject
我对QT5和Android有问题。我试图使用libpurple的交叉构建(感谢GoogleSummerOfCode),但它并没有将其打包到apk和Java中QT5 Android未打包版本化的SharedObject,android,qt,android-ndk,cross-compiling,qt5,Android,Qt,Android Ndk,Cross Compiling,Qt5,我对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'
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
libs被打包)。即使我将其重命名为libpurple.so
,它也不起作用,因为libpurple.so.20
似乎是用二进制文件硬编码的。我也有类似的问题,通过使用无版本的soname重新编译共享库来解决
$objdump -x libpurple.so | g 'SONAME'
SONAME libpurple.so
检查共享库的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
您的android/res/values/libs.xml中有哪些捆绑的_libs?