libgdal.so android错误:无法加载库“ libgdal.so.1”

问题描述 投票:0回答:1

[我的问题如下:我已经成功使用Android工具链GDAL 1.10.1构建了(CC=i686-linux-android-gcc, CXX=i686-linux-android-c++),该工具链会产生以下输出库libgdal.alibgdal.lalibgdal.lailibgdal.solibgdal.so.1,[C0 ]在输出文件夹libgdal.so.1.17.1中的名称(在下文中,我将该文件夹称为.libs)。

我正在尝试在Windows上使用Qt 5.4构建一个简单的Android应用(一个名为$GDAL_LIB_PATH的简单小工具应用,并带有QPushButton。如果我不使用GDAL,则一切正常,并且可以在适用于所有可用平台的Android模拟器上运行我的应用程序:TestAndroidx86armeabi

尽管如此,如果我尝试使用armeabi-v7(例如,通过在应用程序的初始化中简单地调用GDAL,然后链接到GDALAllRegister(),则应用程序崩溃并出现以下错误:

E / art(1614):dlopen(“ / data / app / org.qtproject.example.TestAndroid-1 / lib / x86 / libTestAndroid.so”,RTLD_LAZY)失败:dlopen失败:无法加载库“ libTestAndroid.so”所需的“ libgdal.so.1”;由图书馆造成找不到“ libgdal.so.1”

我已验证Android平台是正确的平台(x86),否则链接程序将跳过错误的libgdal.so对象。

我已使用libgdal.solibgdal.so包括在*.apk(由Qt生成)中。由于Qt禁止,其他文件ANDROID_EXTRA_LIBS *= $GDAL_LIB_PATH/libgdal.so不能以相同的方式包含。

为了避免动态链接,我还尝试将我的应用程序与libgdal.so.x.x链接,但是出现许多链接时错误(例如,未定义的对'atof'的引用)

我在网上搜索过,但没有找到解决问题的方法。

我不被迫使用动态链接,因此,解决以下任何一个问题对我都是有益的:

  1. 构建GDAL时是否有避免创建libgdal.a文件的方法?] >>

  2. 在Qt生成的libgdal.so.x.x文件中是否包含libgdal.so.x.x文件的方法?]

  3. 链接静态库*.apk时如何避免链接时错误?

  4. 感谢您的任何答复!

    我的问题如下:我已经使用产生以下输出库的Android工具链(CC = i686-linux-android-gcc,CXX = i686-linux-android-c ++)成功构建了GDAL 1.10.1 ...

经过几天的试验和错误(主要是错误),我找到了解决问题的方法。

我将其写为我的问题的答案,以便对他人有所帮助。

问题出在libgdal.a的链接时间内。简要地说:链接器创建了“实名”共享库GDAL以及指向它的链接libgdal.so.1.17.1libgdal.so.1

由于某些原因(我忽略),将链接强制为libgdal.so,链接器将搜索libgdal.so(反过来,其将搜索libgdal.so.1)。

可以在以下步骤中总结解决我的问题的解决方法:

  1. libgdal.so.1.17.1根目录中,根据所需配置运行GDAL(请参阅./configure),检查libtool是否为http://trac.osgeo.org/gdal/wiki/BuildingForAndroid

  2. 按如下方式编辑创建的libtool文件(例如,使用ENABLED):

    • library_names_spec的值替换为library_names_spec =“ \ $ libname \ $ {shared_ext}”
    • soname_spec =“”替换soname_spec
    • 的值
    • Type make

  3. 在输出文件夹gedit中将创建唯一的.libs/,现在libgdal.so的链接似乎可以正常工作。

android qt gdal
1个回答
2
投票

经过几天的试验和错误(主要是错误),我找到了解决问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.