我正在尝试使用Qt application
为Android构建Qt Creator
。我使用CrystaX NDK
代替goolge'因为我需要在我的项目中使用boost libraries
,而且,正如CrystaX的官方网站所说,它随之而来。
我使用的是以下版本的工具:
首先,我必须在.pro
文件中手动添加库和标题路径,因为它没有自动找到。存在编译器错误:can't locate libcrystax
,源文件中存在一些关于包含boost headers
的错误。我在项目文件中添加了以下行:
android {
INCLUDEPATH += $$NDK_ROOT/sources/crystax/include \
$$NDK_ROOT/sources/boost/1.58.0/include \
$$PWD/ssl
LIBS += -L"$$PWD/ssl" -lssl -lcrypto
LIBS += -L"$$NDK_ROOT/sources/crystax/libs/$$ANDROID_TARGET_ARCH"
ANDROID_EXTRA_LIBS = $$NDK_ROOT/sources/crystax/libs/$$ANDROID_TARGET_ARCH/libcrystax.so
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
}
重新重建后,我收到了runtime error
或类似内容的错误(libgnustl_shared requires libcrystax, but libcrystax is not loaded
)。
在搜索互联网之后,我发现它正在发生,因为一个需要另一个库的库正在它之前加载,而第二个库在应用程序目录中没有被搜索,仅在系统路径。
我找到了一种解决方法 - 手动加载所需的库。我将默认QtActivity.java
复制到我的项目目录(android/src/.../QtActivity.java
)中以替换默认值并添加以下代码:
static {
System.loadLibrary( "crystax" );
}
之后我没有收到这个错误,但现在我又被另一个错误了:
java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 37 cannot locate '__aeabi_ldiv0'...
是否可以使用Qt + CrystaX NDK
构建Android应用程序?我做错了吗?如果我弄错了或者我误解了整个概念,请解释如何正确地做到这一点。任何帮助表示赞赏。
答案 0 :(得分:2)
这是因为您没有与libgcc.a
相关联。我不知道你的构建系统究竟是如何工作的(好吧,Qt的一个),但一般来说,将libgcc.a添加到其他库列表应该会有所帮助:
ANDROID_EXTRA_LIBS = $$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9/libgcc.a
此行指定arm
的{{1}}变体;显然,你应该根据libgcc.a
值使用正确的值。