首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5安卓没有打包版本化的SharedObject

QT5安卓没有打包版本化的SharedObject
EN

Stack Overflow用户
提问于 2013-08-02 17:21:04
回答 1查看 252关注 0票数 2

我对QT5和安卓系统有意见。我正在尝试使用交叉构建的库紫色(感谢GoogleSummerOfCode),但它没有将其打包到apk和Java抛出中

代码语言:javascript
复制
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似乎是以二进制形式硬编码的。

EN

回答 1

Stack Overflow用户

发布于 2013-10-09 16:22:01

我也有类似的问题,通过使用非版本化的soname重新编译共享库解决了这个问题。

检查共享库的soname:

代码语言:javascript
复制
$objdump -x libpurple.so | g 'SONAME'

您应该会看到类似这样的内容:

代码语言:javascript
复制
SONAME    libpurple.so.20

重新构建库并指定一个非版本化的soname:

代码语言:javascript
复制
arm-linux-androideabi-gcc -shared -fPIC .... \
    -Wl,-soname,libpurple.so -o libpurple.so

现在,共享库应该有一个非版本化的soname。

代码语言:javascript
复制
$objdump -x libpurple.so | g 'SONAME'
    SONAME    libpurple.so

当您将此共享库与您自己的库链接时,它将使用非版本化的库名称。

代码语言:javascript
复制
$objdump -x libSimpleChat.so | g 'NEED'
    NEEDED    libpurple.so
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18013220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档