简体   繁体   English

QT5 Android不打包版本化SharedObject

[英]QT5 Android not Packing Versioned SharedObject

I'm having a problem with QT5 and Android. 我在使用QT5和Android时遇到问题。 I am trying to use a cross-build of libpurple (thanks GoogleSummerOfCode), but it is not packing it to the apk and Java throws 我正在尝试使用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)

The libpurple.so.20 is a symlink to libpurple.so.20.0 , renaming does not change anything, if I copy this link in the android lib folder it is ignored (only .so libs are packaged). libpurple.so.20是一个符号链接libpurple.so.20.0 ,改名并不能改变什么,如果我在android复制此链接lib会被忽略的文件夹(只.so库封装)。 Even if i rename it to libpurple.so , it does not work because libpurple.so.20 seems to be hardcoded in a binary. 即使我将其重命名为libpurple.so ,它也不起作用,因为libpurple.so.20似乎是用二进制形式硬编码的。

I have similar problem and solved by re-compiling shared library with non-versioned soname. 我有类似的问题,可以通过使用非版本化的soname重新编译共享库来解决。

Check the soname of the shared library: 检查共享库的名称:

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

You should see something like: 您应该看到类似以下内容:

SONAME    libpurple.so.20

Rebuild library and give a non-versioned soname: 重建库并给出一个非版本的soname:

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

Now the shared library should have a non-versioned soname. 现在,共享库应该具有一个非版本化的soname。

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

When you link this shared library with your own library, it will use non-versioned library name. 当您将此共享库与自己的库链接时,它将使用非版本库名称。

$objdump -x libSimpleChat.so | g 'NEED'
    NEEDED    libpurple.so

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM