问题描述
我有一个Android应用程序,其中minSdkVersion.apiLevel
设置为18 targetSdkVersion.apiLevel
设置为23.因此,我将NDK platformVersion
设置为18.
I have an Android app with minSdkVersion.apiLevel
set to 18 targetSdkVersion.apiLevel
set to 23. Accordingly I set the NDK platformVersion
to 18.
不幸的是,在将OpenSSL添加到组合中之后,JNI库现在无法链接:
Unfortunately after adding OpenSSL to the mix, the JNI library now fails to link:
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'signal'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'tcsetattr'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'tcsetattr'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function open_console: error: undefined reference to 'tcgetattr'
如果将platformVersion
设置为21(在19上也不起作用),问题就消失了.
The problem goes away if setting platformVersion
to 21 (it doesn't work either at 19).
如果Android应用程序的API级别为18,但JNI库链接为21,这对Android应用程序意味着什么?在运行4.3的设备上启动时会崩溃吗?
What does this mean for the Android app if it has an API level of 18 but the JNI library was linked for 21? Will it crash at launch on a device running 4.3?
我无法想象4.3中会缺少signal
符号.这是NDK的错误吗?
I cannot imagine the signal
symbol be missing from 4.3 though. Is this an NDK bug?
推荐答案
当您在android-20或更早版本上安装共享库时,这正是共享库将发生的情况:它将无法加载.缺少signal
,您应该不会感到惊讶:Android运行时从未打算运行curl等命令行工具.
This is exactly what will happen to your shared library when you install it on android-20 or earlier: it will fail to load. You should not be surprised that signal
was missing: Android runtime was never intended to run command-line tools like curl.
这篇关于与API级别相比,Android NDK平台版本的确切含义是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!