live555

本文介绍如何在JNI环境中使用C++代码,并提供了一个具体的示例,包括如何定义和调用C++函数,以及如何解决编译过程中遇到的问题,如头文件缺失等。

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

jni部分是使用c++写的么?

如果是 在JNI里面要 extern "C"{jni c++代码}


随笔:ubuntu下截图:先按下shift键再按下PrtSc出现小十字鼠标,选取范围截图。


找不到头文件:

1.首先打印当前目录查看

$(warning  ****LOCAL_PATH**** )
$(warning  $(LOCAL_PATH))

2.别人的一个例子,里面有加载另外一个so文件的完整代码,我截图分析下:




其中:将要被加载的so文件为NetSdklib下的libShitAdd.so,编写的头文件为Add.h。编译后输出的so文件为armeabi文件夹下的两个so文件。接下列出并分析Android.mk文件

Android.mk:

LOCAL_PATH := $(call my-dir)

$(warning  ****LOCAL_PATH**** )
$(warning  $(LOCAL_PATH))//打印当前位置

include $(CLEAR_VARS)
LOCAL_MODULE := ShitAdd    //即将被加载的so文件需要重新编译
LOCAL_SRC_FILES := NetSdklib/libShitAdd.so		//即将被加载的so文件位置
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/NetSdk/include//自己编写的头文件位置
include $(PREBUILT_SHARED_LIBRARY)    //编译成动态so文件

include $(CLEAR_VARS)


LOCAL_MODULE    := ShitAdd-test//加载了so文件后编译出的so文件的名字
LOCAL_SRC_FILES := WMNetSdkTest.cpp//

LOCAL_SHARED_LIBRARIES  := libShitAdd //上边即将被加载的so文件重新编译后的名称
LOCAL_LDLIBS    := -llog -lz -lm 
include $(BUILD_SHARED_LIBRARY)

WMNetSdkTest.cpp:

#include "NetSdk/include/Add.h"
#include <jni.h>
#include <android/log.h>
#include <string.h>

#define LOG_TAG "myNetSdkTest"
#define LOGW(a )  __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)

extern "C" JNIEXPORT jint JNICALL Java_com_example_sotest_MainActivity_WMNETSDKTest(
		JNIEnv *env, jobject obj)
{
	LOGW("Strart Server!!!");
        int a = 5;
	int b = 3;
	int c = 0;
        c =  shitAdd(a,b);//这个就是即将被加载的so中的方法
 	return c;
}
另外:如果cpp文件中的标准头文件仍找不到,可以在Android.mk同目录下新建Applcation.mk在其中添加两句:

APP_STL := gnustl_shared
APP_STL:=stlport_shared

这两句只要针对在cpp中的标准头文件如:<string.h>……

接下来直接进入jni目录执行ndk-build.

附件:在百度云中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值