终极篇 C++算法到安卓的移植——AS调用VS的so库

目的:windows平台下的c++算法,需要移植到安卓系统上。平时用惯了Visual Studio,再在其他软件上重新写算法,调试算法,实在头疼。所以我用VS的c++移动开发功能创建动态共享库,将算法内容放入,并实现JNI和JAVA接口部分;最后用Android Studio调用成功。

 

吐槽微软的仿真器以及VS自带的google emulator for android,搞了很久,还是有问题,不能直接用(本着放在一起调试方便,竟然没搞出来。如果有朋友在这一块调试好了,记得发文章,还是很期待的),索性重点不在这里,干脆放弃,使用Android Studio做测试。(本来算法功能测试已经在windows平台测试的差不多了)

 

吐槽开始。。。

三周了,从未接触java,android,对于一个C++死忠粉各种没信心,只能各种查资料,找度娘,找论坛,都以为没戏了,终于给我搞成功了!!

在此特别感谢CSDN的Mr_L_Y,他对我的帮助无以言谢。这位大神贡献的资料可以查看:

VS2019 C++的跨平台开发——Android .so开发

https://blog.csdn.net/luoyu510183/article/details/94590497

VS2019 OpenCV的Windows工程到安卓的移植

https://blog.csdn.net/luoyu510183/article/details/102710080

 

其实有这两篇文章足以移植VS中创建的C++移动开发的SO库,但是想想这么久的辛苦,还是记录一下自己的成果。

(这里插一句,如果是整个大项目的移植,比如团队项目,直接参考Mr_L_Y的移植方法;如果是自己写的,源码结构比较简单的直接参考我这里的方法会更方便一点。)

 

本文使用的软件版本如下:

  • VisualStudio 2019 (创建c++移动开发的动态库)
  • AndroidStudio 3.5 (调用VS创建的动态库,并在模拟器中显示结果)
  • NDK-r16B
  • Android SDK 21
  • Opencv 4.1.1(android)

 

 

第一部分:创建c++算法的so库,供安卓调用

1. 软件准备:安装Visual Studio中的“使用C++的移动开发”,不需要在可选项中选择模拟器

2. 打开VS,新建项目,选择”动态共享库(Android)“,命名为SharedObject

3. 配置opencv

由于算法中使用了opencv,具体配置可以参考文章

Visual Studio + android + opencv 跨平台生成动态库文件https://blog.csdn.net/Merria28/article/details/102517646

在这里特别讲一下配置的问题,java不需要区分debug和release,所以在附加依赖项或者库依赖项中的所有配置是一样的。需要注意的是,opencv的第三方依赖库x86_64和x86中比arm64和arm的库文件少一个libtegra_hal.a,配置的时候不要添加就可以了。

附加库目录需要指定到配置文件夹:

OpenCV-android-sdk\sdk\native\3rdparty\libs\armeabi-v7a

参考MR_L_Y的文章,使用了$(PlatformShortName)代替了具体的每种配置,但是我的编译不过,就自己手动改成

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 调用 c是指在编程使用c语言的各种函数和来实现特定的功能。c语言作为一种高级编程语言,可以被广泛地应用于计算机编程、算法设计、游戏开发等领域。通过调用c语言的各种函数和,程序员可以利用c语言提供的强大功能来实现各种不同的任务。 在Windows平台上,c语言常常被用于开发各种系统应用程序、驱动程序和图像处理软件等。在Linux环境下,c语言也是非常受欢迎的编程语言,特别是在开发网络应用程序、系统服务和实时系统方面。 要调用c语言的函数和,程序员需要在程序包含相应的头文件,并在代码调用相应的函数。这需要一定的编程经验和技能,以及对c语言的熟悉程度。此外,还需要了解操作系统、编译器等相关知识。 总之,调用c语言是计算机程序设计非常常见和重要的一部分,它可以为程序员提供一种强大的工具来实现各种不同的任务。不管你是初学者还是经验丰富的程序员,掌握c语言编程的基本技能和知识是非常重要的。 ### 回答2: 在编程语言,C语言是一种被广泛使用的通用型编程语言。其语法简单,运行速度快,具有高度的可移植性,因此在各种计算机系统上都得到了广泛的应用。调用C函数是指在编程过程利用C语言定义的函数,从而实现特定的任务或操作。调用C函数的过程包括函数的声明、函数的调用和函数的返回值处理。在C语言,函数的声明和函数的实现一般分别放在不同的文件,并通过头文件的方式进行引用。例如,要调用math.h定义的sin函数,需要在程序包含头文件#include <math.h>,然后通过sin()函数的名称来进行调用,例如计算1的正弦值可以写成double x=sin(1.0)。调用C函数需要注意传递参数的类型和顺序、处理函数的返回值、避免函数重复定义等问题,这有助于确保程序的正确性和稳定性。使用C语言编写程序的开发者可以利用C语言的丰富特性和工具,快速高效地实现各种计算、数据处理等功能,从而为各种应用场景提供强大的支持。 ### 回答3: 调用 C语言指的是在编写程序时借助C语言的函数和来实现相关功能。C语言是一种面向过程的编程语言,广泛应用于系统软件开发、嵌入式系统开发、游戏开发等领域。在调用C语言时,需要先编写C语言程序并将其编译链接至可执行文件。然后在其他编程语言的程序通过调用该可执行文件或连接的函数实现C语言的功能。C语言的调用方式有很多种,比如在C++程序调用、通过JNI在Java程序调用、在Python程序调用等等。调用C语言可以充分发挥C语言的高效、稳定性等优势,同时也有利于不同编程语言之间的协作与交互。在具体实现过程,需要注意不同编程语言之间的数据类型转换等问题,以确保调用的效果正确无误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值