cmake 动态库构建及使用(c动态库)

一、c库文件增加

增加Core.h 头文件

#函数声明
int add(int a,int b);

增加Core.cpp文件

#include "Core.h"int add(int a, int b)
{return a+b;
}

二、CMakeLists.txt规则增加

   规则见代码

#cmake 版本要求
cmake_minimum_required(VERSION 2.8)#增加头文件路径
include_directories(.)#增加源文件路径
aux_source_directory(. SRC_LIST1)#增加库目标
add_library(core SHARED  ${SRC_LIST1})

三、编译生成动态库

[root@ dync_core_lib]# ls
build  CMakeLists.txt  Core.cpp  Core.h
[root@ dync_core_lib]# cd build/
[root@ build]# cmake ..
-- The C compiler identification is GNU 5.2.1
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/project/dync_core_lib/build
[root@ build]# make
Scanning dependencies of target core
[100%] Building CXX object CMakeFiles/core.dir/Core.cpp.o
Linking CXX shared library libcore.so
[100%] Built target core
[root@ build]# ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  libcore.so  Makefile

四、项目使用libcore.so动态库

 把Core.h增加到项目的include中

 把libcore.so动态库增加到项目中

 举例:

          把Core.h放到项目的Include/Core中

          把libcore.so放到项目的Lib中

── build
├── CMakeLists.txt
├── Include
│   ├── Core
│   │   └── Core.h
│   └── Libuv
│       ├── Libuv.cpp
│       ├── Libuv.h
│       └── UVInclude
│           ├── uv
│           │   ├── aix.h
│           │   ├── bsd.h
│           │   ├── darwin.h
│           │   ├── errno.h
│           │   ├── linux.h
│           │   ├── os390.h
│           │   ├── posix.h
│           │   ├── sunos.h
│           │   ├── threadpool.h
│           │   ├── tree.h
│           │   ├── unix.h
│           │   ├── version.h
│           │   └── win.h
│           └── uv.h
├── Lib
│   ├── libcore.so
│   └── libuv.so
└── Main.cpp

CMakeLists.txt规则

cmake_minimum_required(VERSION 2.8)#项目名称
project(main)#向编译单元添加包含目录的路径。这允许源文件包含来自指定目录的头文件
include_directories(Include)#用于将指定目录下的所有源文件列表赋值给一个变量
aux_source_directory(Include/Libuv SRC_LIST1)#从指定目录查找对应的库
find_library(LIB libuv.so ./Lib)
find_library(LIB1 libcore.so ./Lib)if(LIB)message("find libuv.so")
else()message("not find libuv.so")
endif()#添加一个可执行目标以及它的源文件
add_executable(main Main.cpp ${SRC_LIST1})#为指定的目标添加链接库, 这里增加libuv.so库
target_link_libraries(main ${LIB} ${LIB1})

Main.cpp使用库

#include<iostream>
#include "Libuv/Libuv.h"
#include "Core/Core.h"using namespace std;int main(){int result = add(1, 2);cout<<"result:"<<result<<endl;Libuv libuv;libuv.Init();string input;while(true){cout<<"enter cmd( input 'exit' quit process)"<<endl;getline(cin, input);if( input == "exit"){cout<<"exit process"<<endl;break;} else{cout<<"unknow cmd:"<<input<<endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淡茶怎么泡?

很多人都知道喝浓茶对身体不好&#xff0c;但是怎么冲泡淡茶却一知半解。按照《品深淡茶冲泡标准》中对绿茶冲泡淡茶的规定&#xff0c;冲泡的茶汤中咖啡碱不得高于31.67mg/100mL&#xff0c;可可碱不得高于2.67mg/mL&#xff0c;茶碱不得高于1.50mg/100mL&#xff0c;茶多酚不…

[C++核心编程-03]----C++函数提高学习

目录 引言 正文 01-函数提升简介 02-函数默认参数 03-函数占位参数 04-函数重载 05-函数重载的注意事项 总结 引言 函数在C编程中扮演着至关重要的角色&#xff0c;通过合理使用函数&#xff0c;可以提高程序的结构性、灵活性、可读性和维护性。因此&…

Guer完成对Gallium Semi的GaN产品组合的收购

预计到2024年6月&#xff0c;完整的射频氮化镓产品组合将完成整合 总部位于美国的Guerrilla RF (GUER)已完成对镓半导体公司GaN功率放大器和前端模块的全部收购。 自2024年4月26日起&#xff0c;GUER收购了Gallium Semiconductor先前发布的所有组件以及正在开发的新内核。此外…

软件测试与管理-白盒测试-基本路径测试法

知识点&#xff1a; 1.原理 是在程序控制流图的基础上&#xff0c;通过分析控制构造的环路复杂性&#xff0c;导出基本可执行路径的集合&#xff0c;然后根据可执行路径进行测试用例设计的方法。此方法设计出的测试用例需保证被测程序的每个可执行语句至少执行一次。 2.步骤 &a…

计算机SCI期刊,中科院2区,IF=6+,自引率低,专业认可度高!

一、期刊名称 Journal of King Saud University-Computer and Information Sciences 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;6.9 中科院分区&#xff1a;2区 出版方式&#xff1a;开放出版 版面费&#xff1a;$…

开源模型 Prometheus 2 能够评估其他语言模型,其效果几乎与 GPT-4 相当

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

在Codelab对llama3做Lora Fine tune微调

Unsloth 高效微调大模型的工具&#xff0c;通过Unsloth微调Llama3, Mistral, Gemma 速度提升2-5倍&#xff0c;内存减少70%&#xff01; Codelab 创建一个jupyter notebook 选择 T4 GPU 安装Fine tune 相关的lib %%capture import torch major_version, minor_version torch…

权益商城系统源码,支持多种支付方式

权益商城系统源码&#xff0c;支持多种支付方式&#xff0c;后台商品管理&#xff0c;订单管理&#xff0c;串货管理&#xff0c;分站管理&#xff0c; 会员列表&#xff0c;分销日志&#xff0c;应用配置。 上传到服务器&#xff0c;修改数据库信息&#xff0c;导入数据库&a…

Stylus:深入解析与实战引入

Stylus&#xff1a;深入解析与实战引入 在前端开发的世界中&#xff0c;CSS一直扮演着至关重要的角色。然而&#xff0c;随着项目的复杂性和规模不断增长&#xff0c;原始的CSS逐渐显露出其局限性。为了克服这些限制&#xff0c;开发者们引入了CSS预处理器&#xff0c;如Sass、…

Python中的分布式爬虫系统Scrapy与分布式任务队列的结合

随着互联网的不断发展&#xff0c;网络爬虫在数据采集和信息挖掘中发挥着重要作用。然而&#xff0c;单机爬虫往往难以应对大规模数据抓取的需求&#xff0c;因此&#xff0c;构建分布式爬虫系统成为了一种必然选择。本文将介绍如何利用 Python 中的 Scrapy 框架和分布式任务队…

android studio apt代码编写实战

之所以试一下apt代码的编写&#xff0c;是因为发现几年前写的工程&#xff0c;在新的android studio中debug apt代码时&#xff0c;一直连不上debug环境&#xff0c;提示报错 Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refu…

IOS自动化—将WDA打包ipa批量安装驱动

前言 CSDN&#xff1a; ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑&#xff0c;OS版本在12.4及以上&#xff08;低于这个版本无法安装Xcode14&#xff0c;装不了Xcode14就…

excel中数据筛选技巧

1、筛选excel中破折号前后都为空的数据 在Excel中查找破折号前后为空的数据&#xff0c;你可以结合使用Excel的查找和筛选功能&#xff0c;或者利用一些公式来判断。以下是两种常用的方法&#xff1a; 方法一&#xff1a;使用筛选功能选中数据范围&#xff1a;首先&#xff0c…

微信小程序miniprogram_npm目录主包太大如何处理

在使用TDesign开发小程序&#xff0c;miniprogram_npm目录下很多组件&#xff0c;感觉很多组件我都没引用&#xff0c;为什么都在主包来&#xff0c;导致主包很大。如何优化&#xff1f; 在使用npm构建后生成的miniprogram_npm目录里&#xff0c;有所有TDesign组件。但是有很…

OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案

因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数&#xff0c;所以 OceanBase 没有对其兼容&#xff0c;取而代之的是兼容了 dbms_crypto.hash&#xff0c;其用法详见这篇 KB 但是&#xff0c;并不是所有业务都接受修改源码&#xff0c;因为复杂系统里&…

Docker 入门篇(六)-- idea 打包 docker 镜像流程

环境准备&#xff1a; idea 环境&#xff1a;IntelliJ IDEA 2021.3.1 (Ultimate Edition)docker 版本&#xff1a;v. 26.1.0准备 springboot jar 文件 &#xff1a;target/DockerDemo-0.0.1-SNAPSHOT.jardocker 可视化管理工具 portainer &#xff1a;v2.6.0 一. 配置docker远…

27.leetcode---随机链表的复制(Java版)

题目链接: https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 题目解析: 使用map来解这个题就比较方便了 代码: 测试:

论文阅读:《Sequence can Secretly Tell You What to Discard》,减少推理阶段的 kv cache

目前各类大模型都支持长文本&#xff0c;例如 kimi chat 以及 gemini pro&#xff0c;都支持 100K 以及更高的上下文长度。但越长的上下文&#xff0c;在推理过程中需要存储的 kv cache 也越多。假设&#xff0c;数据的批次用 b 表示&#xff0c;输入序列的长度仍然用 s 表示&a…

【typescript测试 - Jest 配置与使用】

安装 npm install --save-dev types/jestnpm install --save-dev ts-jest配置 tsconfig.json {"compilerOptions": {"types": ["jest"]} }jest.config.js module.exports {preset: ts-jest,testEnvironment: node, };使用 // add.js funct…

C++学习笔记——对仿函数的理解

文章目录 思维导图仿函数出现的逻辑仿函数使用上的巧妙 仿函数的本质仿函数的优势仿函数语法的巧妙 思维导图 仿函数出现的逻辑 我们在学习stack时会遇到一些新的问题&#xff0c;这些问题需要我们使用非类型模板参数去解决&#xff0c;即我们需要在设计类时需要有一个途径去快…