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 回答