【混合编程jni】之第三篇 c++ 项目的创建,clion ,一些问题点
讲了一些Java侧的基础知识,但是还没有讲C++侧的,
毕竟做JNI 开发很少说是不参与c++ 的开发,比如我这次要做的项目
就是包装别的组给的动态库,所以还是要会C++的开发
clion 的安装
IDE的选择
IDE的选择常规来说是用Visual studio ,之前做C++的时候也是用这个,选择idea 有三个原因
安装文件实在有点大,下载麻烦 在vscode和clion 之间做选择,vscode不熟悉,放弃 一直都在用idea,对于idea 熟悉,所以果断选择clion 安装过程这里就不赘述了,只要一步一步的安装就行了
编译库的安装 这个理选择MinGW,MinGW 就是 GCC 的 Windows 版本
下载地址:Downloads - MinGW-w64
根据你的电脑平台,选择对应的版本,一步一步安装就可以了
如果你下载的绿色版本也不无所谓,等下配置就行了
clion的配置
settings ->build -> tools
选择增加一个编译器,找你的安装地址就可以了
动态链接库的创建
动态库和静态库的区别
静态库 在被其他程序引用的时候,会直接打包进exe,相当于直接包含进去,静态库以后缀为”.a”,库类型为static
动态库 在运行的时候才会调用库,和使用者是分开的,在win下为.dll ,在linux 下为so,库类型为shared
这里选择shared
点击next 等待clion 创建项目
编译后会生成一个cmake-build-debug 的文件夹,这个文件夹是cmake的文件夹,
生成的动态库也会在这里
修改自动生成的hello 函数为下面
#ifndef TETT_LIBRARY_H
#define TETT_LIBRARY_H
extern "C" void hello();
#endif //TETT_LIBRARY_H
再次编译后生成了dll ,这个就是你要的动态链接库
extern C extern 是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用
extern "C"的设立动机是实现C++与C及其它语言的混合编程。 C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同
C ++编译器不能仅仅使用函数名作为唯一的id来链接,所以通过添加关于参数的信息来破坏名称
查看暴露的接口
给的动态链接库可能因为写错了没有暴露函数,怎么确认函数暴露出来呐、?
Linux 下
nm命令(查看库中函数等)查看so接口信息
nm -D libtestJna.so
window下
需要你安装visual studio,或者下载dumpbin.exe
切换到dumpbin 所在的目录执行
.\dumpbin.exe /exports D:\clion\tett\cmake-build-debug\tett.dll
看下图
总结: 这篇主要是讲一下动态链接库的创建
并没有涉及C/C++ 的相关的知识点
最后还讲了extern "C" 和两种观察动态库的函数方法
- 点赞
- 收藏
- 关注作者
评论(0)