【混合编程jni】之第三篇 c++ 项目的创建,clion ,一些问题点

举报
香菜聊游戏 发表于 2022/06/26 21:25:12 2022/06/26
【摘要】 讲了一些Java侧的基础知识,但是还没有讲C++侧的,毕竟做JNI 开发很少说是不参与c++ 的开发,比如我这次要做的项目就是包装别的组给的动态库,所以还是要会C++的开发clion 的安装IDE的选择IDE的选择常规来说是用Visual studio ,之前做C++的时候也是用这个,选择idea 有三个原因安装文件实在有点大,下载麻烦 在vscode和clion 之间做选择,vscode不...

讲了一些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

选择增加一个编译器,找你的安装地址就可以了

image.png

动态链接库的创建

动态库和静态库的区别

静态库 在被其他程序引用的时候,会直接打包进exe,相当于直接包含进去,静态库以后缀为”.a”,库类型为static

动态库 在运行的时候才会调用库,和使用者是分开的,在win下为.dll ,在linux 下为so,库类型为shared

这里选择shared

image.png

点击next 等待clion 创建项目

image.png

编译后会生成一个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

看下图

image.png

总结: 这篇主要是讲一下动态链接库的创建

并没有涉及C/C++ 的相关的知识点

最后还讲了extern "C" 和两种观察动态库的函数方法

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。