CLionC++加载静态库和动态库
记录学习内容
编译环境:
IDE:CLion 2022.2
ToolChains:MinGW64
一、加载静态库
1、生成静态库
用 求平方 举例:
先编写静态库文件Math.cpp 输出num的平方
-
-
-
using namespace std;
-
-
void customLibTest(const char * num) {
-
double x = strtod(num, nullptr);
-
double res = x * x;
-
cout << "输入x: " << x << "的平方是" << res << endl;
-
}
在项目CMakeList.txt中用
add_library(Math STATIC math.cpp)
build生成静态库 工程目录下会有Math.lib创建出来
2、调用静态库
在调用静态库的项目目录下创建libs文件夹用来存放上一步生成的静态库文件Math.lib
在CmakeList.txt中进行如下配置:
-
cmake_minimum_required(VERSION 3.23)
-
project(Test1)
-
-
set(CMAKE_CXX_STANDARD 11)
-
-
link_directories(libs) #链接文件夹 指定引用的外部库文件夹路径 用在add_executable或add_library之前
-
-
add_executable(Test main.cpp main.h)
-
-
target_link_libraries(Test Math.lib) #链接目标库文件 指定引用的外部库文件 用在add_executable或add_library之后
在main.cpp中如下图所示代码 进行调用:
-
-
//加载静态库
-
-
//声明静态库中的方法
-
void customLibTest(const char * num);
-
-
int main() {
-
customLibTest("2");
-
return 0;
-
}
结果:
二、加载动态库
1、生成动态库
这里生成动态库的环境是Windows,所以生成的应该是dll文件,如果是Linux生成的应该是so文件。但是调用方式都是一样的。
在CLion中新建动态库工程:
还是以求平方为例 编写.cpp和.h如下:
library.h
-
-
-
-
void customLibTest(const char * num);
-
-
ps:如果有java jna与动态库dll交互的需求 需要在上面头文件的方法前加上 extern "C" (同时要注意的是java版本位数要与编译dll的环境一致,即32位就都是32位,64位就都是64位)
library.cpp
-
-
-
-
using namespace std;
-
-
void customLibTest(const char * num) {
-
double x = strtod(num, nullptr);
-
double res = x * x;
-
cout << "输入x: " << x << "的平方是" << res << endl;
-
}
CMakeList.txt
-
cmake_minimum_required(VERSION 3.23)
-
project(Math)
-
-
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output) #修改所生成库的目标文件夹
-
set(CMAKE_CXX_STANDARD 11)
-
-
add_library(Math SHARED library.cpp)
build一下,会在工程目录下创建output文件夹,文件夹下就是生成出来的dll库文件。
2、调用动态库
先将上一步生成出来的文件都复制到引用动态库的Test1工程目录的libs下:
调用动态库的工程CMakeList.txt代码配置如下:
-
cmake_minimum_required(VERSION 3.23)
-
project(Test1)
-
-
set(CMAKE_CXX_STANDARD 11)
-
-
link_directories(libs) #链接文件夹 用在add_executable或add_library之前
-
-
add_executable(Test main.cpp main.h)
-
-
target_link_libraries(Test cygMath.dll libMath.dll.a) #链接目标库文件 用在add_executable或add_library之后
C 代码main.cpp中调用的时候可以直接写:
-
-
-
//声明动态库的方法
-
void customLibTest(const char * num);
-
-
int main() {
-
customLibTest("8");
-
return 0;
-
}
运行结果:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbjaac
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01