Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用STL与NDK的运行时链接错误_Java_Android_C++_Eclipse_Android Ndk - Fatal编程技术网

Java 使用STL与NDK的运行时链接错误

Java 使用STL与NDK的运行时链接错误,java,android,c++,eclipse,android-ndk,Java,Android,C++,Eclipse,Android Ndk,几天来,我一直在努力在Android上安装Cpp程序,但我遇到了一个我认为可能是bug的问题。我使用的是SDL2,但没有其他库,而且我使用的是SDL android项目模板 基本程序运行正常,但我希望使用Cpp stdlibs和STL,因此根据说明,我将APP_STL:=stlport_static添加到Application.mk并重建了程序,但在此之后,应用程序只显示一段时间的空白屏幕,然后崩溃,调试说明如下: 01-20 22:10:14.817: D/dalvikvm(26097): T

几天来,我一直在努力在Android上安装Cpp程序,但我遇到了一个我认为可能是bug的问题。我使用的是SDL2,但没有其他库,而且我使用的是SDL android项目模板

基本程序运行正常,但我希望使用Cpp stdlibs和STL,因此根据说明,我将APP_STL:=stlport_static添加到Application.mk并重建了程序,但在此之后,应用程序只显示一段时间的空白屏幕,然后崩溃,调试说明如下:

01-20 22:10:14.817: D/dalvikvm(26097): Trying to load lib /data/data/com.kebabkeisari.peli/lib/libSDL2.so 0x41d06890
01-20 22:10:14.817: W/dalvikvm(26097): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/libsdl/app/SDLActivity;
01-20 22:10:14.817: W/dalvikvm(26097): Class init failed in newInstance call (Lcom/kebabkeisari/peli/Ribale;)
01-20 22:10:14.822: D/AndroidRuntime(26097): Shutting down VM
01-20 22:10:14.822: W/dalvikvm(26097): threadid=1: thread exiting with uncaught exception (group=0x4109f2a0)
01-20 22:10:14.827: E/AndroidRuntime(26097): FATAL EXCEPTION: main
01-20 22:10:14.827: E/AndroidRuntime(26097): java.lang.ExceptionInInitializerError
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.Class.newInstanceImpl(Native Method)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.Class.newInstance(Class.java:1319)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.Instrumentation.newActivity(Instrumentation.java:1057)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2015)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.os.Looper.loop(Looper.java:137)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at android.app.ActivityThread.main(ActivityThread.java:4898)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.reflect.Method.invokeNative(Native Method)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.reflect.Method.invoke(Method.java:511)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at dalvik.system.NativeStart.main(Native Method)
01-20 22:10:14.827: E/AndroidRuntime(26097): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1307]:  1951 cannot locate 'signal'...
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.Runtime.loadLibrary(Runtime.java:370)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at java.lang.System.loadLibrary(System.java:535)
01-20 22:10:14.827: E/AndroidRuntime(26097):    at org.libsdl.app.SDLActivity.<clinit>(SDLActivity.java:49)
01-20 22:10:14.827: E/AndroidRuntime(26097):    ... 15 more
01-20 22:10:14.817:D/dalvikvm(26097):尝试加载lib/data/data/com.kebabkeisari.peli/lib/libSDL2.so 0x41d06890
01-20 22:10:14.817:W/dalvikvm(26097):异常Ljava/lang/unsatifiedlinkerror;初始化Lorg/libsdl/app/sdl时抛出;
01-20 22:10:14.817:W/dalvikvm(26097):类初始化在newInstance调用中失败(Lcom/kebabkeisari/peli/Ribale;)
01-20 22:10:14.822:D/AndroidRuntime(26097):关闭虚拟机
01-20 22:10:14.822:W/dalvikvm(26097):threadid=1:线程退出,但出现未捕获异常(组=0x4109f2a0)
01-20 22:10:14.827:E/AndroidRuntime(26097):致命异常:主
01-20 22:10:14.827:E/AndroidRuntime(26097):java.lang.ExceptionInInitializeError
01-20 22:10:14.827:E/AndroidRuntime(26097):位于java.lang.Class.newInstanceImpl(本机方法)
01-20 22:10:14.827:E/AndroidRuntime(26097):位于java.lang.Class.newInstance(Class.java:1319)
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.app.Instrumentation.newActivity(Instrumentation.java:1057)上
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2015)
01-20 22:10:14.827:E/AndroidRuntime(26097):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.app.ActivityThread.access$600(ActivityThread.java:140)
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-20 22:10:14.827:E/AndroidRuntime(26097):在android.os.Looper.loop(Looper.java:137)
01-20 22:10:14.827:E/AndroidRuntime(26097):位于android.app.ActivityThread.main(ActivityThread.java:4898)
01-20 22:10:14.827:E/AndroidRuntime(26097):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-20 22:10:14.827:E/AndroidRuntime(26097):在java.lang.reflect.Method.invoke(Method.java:511)
01-20 22:10:14.827:E/AndroidRuntime(26097):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-20 22:10:14.827:E/AndroidRuntime(26097):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-20 22:10:14.827:E/AndroidRuntime(26097):在dalvik.system.NativeStart.main(本机方法)
01-20 22:10:14.827:E/AndroidRuntime(26097):原因:java.lang.UnsatifiedLink错误:无法加载库:reloc_库[1307]:1951无法定位“信号”。。。
01-20 22:10:14.827:E/AndroidRuntime(26097):在java.lang.Runtime.loadLibrary(Runtime.java:370)上
01-20 22:10:14.827:E/AndroidRuntime(26097):位于java.lang.System.loadLibrary(System.java:535)
01-20 22:10:14.827:E/AndroidRuntime(26097):在org.libsdl.app.SDLActivity(SDLActivity.java:49)
01-20 22:10:14.827:E/AndroidRuntime(26097):。。。还有15个
因此程序在运行时链接失败。STL是罪魁祸首,是的,我试过gnustl和其他人,但同样的问题也发生了

我正在使用ndk构建和Eclipse,在三星Galaxy S3上运行应用程序


我在网上搜索了一下,发现确实有很多类似的问题,有一个地方据说没有同时安装armeabi和armeabi-v7,但这没有帮助。

这似乎与最近的很多问题是一样的,比如。问题是您正在使用
android-21
API构建应用程序。
signal
函数(就像
rand
)过去是报头中的内联函数(分别将代码重定向到
bsd_signal
lr和48
),但在
android-21
中添加了新函数,因此这些函数不再是报头中的内联函数

因此,如果您希望应用程序在早于
android-21
的平台上运行,则需要确保使用希望代码运行的最低API级别构建本机代码,例如,在
jni/Application.mk
中添加
app\u PLATFORM:=android-9

如果您需要更新版本的功能,
android-19
也应该可以很好地工作。对于21之前的verions,较新的平台版本只添加了以前不存在的新功能(但旧功能的行为与以前一样),因此,如果您只使用android-N中存在的功能,即使您使用
android-19
(对于N<19)构建它,它也应该在android-N上工作。但是21改变了这一切,以前存在的函数(但重定向到其他函数)现在链接到一个不同的名称(老实说,更正确的名称),这是以前不可用的


但是,这并不影响您可以使用什么API级别构建java代码(如果有的话)-如果您愿意,您仍然可以针对最新的API构建该部分。

这似乎与许多最近的API相同,例如。问题是您正在使用
android-21
API构建应用程序。
signal
函数(就像
rand
)过去是报头中的内联函数(分别将代码重定向到
bsd_signal
lr和48
),但在
android-21
中添加了新函数,因此这些函数不再是报头中的内联函数

因此,如果您希望应用程序在早于
android-21
的平台上运行,您需要确保使用希望代码运行的最低API级别构建本机代码,例如添加
app\u PLATFORM:=android-9