VS2019编译带opencv动态库.so(一)

vs安装相应库

 

安装opencv-for-Android到任意盘中

属性表配置

首先选择相应平台 ARM ARM64 X86 X64

分别对应 armeabi-v7a armeabi-v8a x86 x86_64 相应文件库

:这里输入依赖项目时,在相应路径1.输入“cmd" 2.再输入 dir /b *.so>1.txt 这段代码 含义为将后缀为.so的文件名导入到1.txt文档中 这样就不用一个一个修改了

VS2019动态库编译架构

OpenCVFunc.h
#pragma once

float TestOpencv(float* buf, int len);
float TestMath();
OpenCVFunc.cpp
#include "OpenCVFunc.h"

#include <math.h>
#include <opencv.hpp>

float TestOpencv(float* buf, int len)
{
	cv::Mat mat = cv::Mat(len, 1, CV_32FC1, buf);
	auto sum = cv::sum(mat);
	return sum.val[0];
}

float TestMath()
{
	return sqrt(2.0f);
}//这里运用了sqrt 需要在依赖添加 -lm
SharedObject9.h
#pragma once

class SharedObject9
{
public:
	const char * getPlatformABI();
	SharedObject9();
	~SharedObject9();
};
SharedObject9.cpp
#include "SharedObject9.h"


#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "SharedObject9", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "SharedObject9", __VA_ARGS__))

extern float TestOpencv(float* buf, int len);
extern float TestMath();

extern "C" {

	float ExternTestOpencv(float* buf, int len) //这个用来导出给Android JNI使用
	{
		return TestOpencv(buf, len);
	}

	float ExternTestMath()//这个用来导出给Android JNI使用
	{
		return TestMath();
	}

	//C++导出给Java类使用的命名规范
	//Java_packagename_classname_functionname
	//第一个传参总是JNIEnv* env
	//第二个传参 如果是static成员函数就是jclass type,
	//		    如果是非static成员函数就是jobject thiz,
	//第三个传参才是真正的参数
	JNIEXPORT jfloat JNICALL
		Java_com_jniexample_JNIInterface_CVTestSum(JNIEnv* env, jclass type, jfloatArray buf) //这个用来导出给Java使用
	{
		auto len = env->GetArrayLength(buf);
		jboolean notcopy = JNI_FALSE;
		float* fptr = env->GetFloatArrayElements(buf, &notcopy);//从Java内存转换到native指针
		return TestOpencv(fptr, len);
	}
	JNIEXPORT jfloat JNICALL
		Java_com_jniexample_JNIInterface_TestSum(JNIEnv* env, jclass type, jfloatArray buf)//这个用来导出给Java使用
	{
		auto len = env->GetArrayLength(buf);
		jboolean notcopy = JNI_FALSE;
		float* fptr = env->GetFloatArrayElements(buf, &notcopy);
		float sum = 0;
		for (size_t i = 0; i < len; i++)
		{
			sum += fptr[i];
		}
		return sum;
	}
	JNIEXPORT jfloat JNICALL
		Java_com_jniexample_JNIInterface_TestMath(JNIEnv* env, jclass type)//这个用来导出给Java使用
	{
		return TestMath();
	}


	//此简单函数返回平台 ABI,此动态本地库为此平台 ABI 进行编译。
	const char* SharedObject9::getPlatformABI()
	{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#define ABI "armeabi-v7a/NEON"
#else
#define ABI "armeabi-v7a"
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#else
#define ABI "unknown"
#endif
		LOGI("This dynamic shared library is compiled with ABI: %s", ABI);
		return "This native library is compiled with ABI: %s" ABI ".";
	}

	void SharedObject9()
	{

	}

	SharedObject9::SharedObject9()
	{
	}

	SharedObject9::~SharedObject9()
	{
	}


}
pch.h
#include <jni.h>
#include <errno.h>

#include <string.h>
#include <unistd.h>
#include <sys/resource.h>

#include <android/log.h>

库文件所在地

至此,关于vs2019编译动态库解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值