android jni wrapper,c - Android NDK - Error Linking Shared library and JNI Wrapper - Stack Overflow

在尝试将使用NDK独立工具链在不同构建机器上生成的Shared Library链接到Android Studio应用时遇到问题。尽管ndk-build成功编译并生成了lib/armeabi-v7a/testLib.so,但在手机上运行应用时,System.loadLibrary('testLib')报找不到testLib.so的错误。错误日志显示Dalvik系统路径类加载器无法找到该.so文件。已检查所有构建步骤,包括使用javah生成JNI头文件和编写对应的JNI wrapper。目前尚不清楚问题所在,寻求帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I'm trying to link a Shared Library that I generated with the NDK-Standalone toolchain on a different build machine. Then using that specific .so I put it on Android Studio. From there I created a jni.h file using javah which then helped me write the .c JNI for the function calls.

ndk-build does compile and seems to work correctly but when trying to run the application on the phone I get a error at

static {

System.loadLibrary("testLib")

}

Saying that could not find testLib.so even though it is generated and in the libs/armeabi-v7a/testLib.so directory

CURRENT ERROR:

01-31 14:41:53.779 19024-19024/com.jolopy.testing_02 E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.jolopy.testing_02, PID: 19024

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.jolopy.testing_02-2/base.apk"],nativeLibraryDirectories=[/data/app/com.jolopy.testing_02-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "testLib.so"

at java.lang.Runtime.loadLibrary(Runtime.java:367)

at java.lang.System.loadLibrary(System.java:1076)

at com.jolopy.testing_02.TestLib.(TestLib.java:6)

at com.jolopy.testing_02.MainActivity.onCreate(MainActivity.java:18)

How I built the .so file:

arm-linux-androideabi-gcc -c -fPIC testLib.c -o test.o

arm-linux-androideabi-gcc test.o -o testing.so

From there I wrote a JNI wrapper class using javah which generated the testing_Android.h file. Which from there generated the testing_Android.c JNI wrapper that I'm using to call functions from my testLib.c library:

#include "testLib.h"

//Including Machine Generated Header

#include "testing_Android.h"

#include

JNIEXPORT void JNICALL Java_com_jolopy_testing_102_TestLib_testinglib_1Initialize

(JNIEnv *env, jobject obj){

(void)env;

(void)obj;

testing_Initialize();

}

JNIEXPORT jint JNICALL Java_com_jolopy_testing_102_TestLib_testinglib_1Get_1Count

(JNIEnv *env, jobject obj){

(void)env;

(void)obj;

return(testing_Get_Count());

}

JNIEXPORT jint JNICALL Java_com_jolopy_testing_102_TestLib_testinglib_1Get_1CurrentName

(JNIEnv *env, jobject obj, jlong ptr, jint x){

(void)env;

(void)obj;

return (testing_Get_CurrentName((char *)ptr , (int)x));

}

From there I have 5 files in the jni folder in Android which is where I run the ndk-build command from:

testing.so | testing_Android.h | testing_Android.c | Application.mk | Android.mk

Android.mk:

LOCAL_PATH :=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := testLib

LOCAL_SRC_FILES := testing.so

LOCAL_EXPORT_C_INCLUDES := testing_Android.c

include $(PREBUILT_SHARED_LIBRARY)

Application.mk:

APP_PLATFORM := android-19

APP_ABI := armeabi-v7a

Any suggestions or faults in my progress that you might see that I don't would be greatly appreciated.

-Cheers!

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值