【C++】动静态库的生成与调用

news2024/9/30 21:19:08
  • 目录层级
    在这里插入图片描述

  • lib/Deal.cpp

#include "Deal.hpp"
#include <iostream>

int DataInc(int num)
{
  std::cout << __FUNCTION__ << " Dealing " << num << "..." << std::endl;
  return ++num;
}

int DataDec(int num)
{
  std::cout << __FUNCTION__ << " Dealing " << num << "..." << std::endl;
  return --num;
}
  • lib/Deal.hpp
#pragma once

extern "C" int DataInc(int num);
extern "C" int DataDec(int num);
  • lib/CMakeLists.txt
file(GLOB source_dir   "${CMAKE_CURRENT_SOURCE_DIR}/*cpp")
list(APPEND source_dir "${CMAKE_CURRENT_SOURCE_DIR}/Deal.cpp")

add_library(Deal SHARED ${source_dir}) # SHARED STATIC MODULE EXCLUDE_FROM_ALL
  • CmakeLists.txt
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(LibTest LANGUAGES CXX)

#add_library(libDeal SHARED Deal.cpp) # SHARED STATIC MODULE EXCLUDE_FROM_ALL
add_subdirectory(lib)

add_executable(LibTest main.cpp)
target_link_libraries(LibTest Deal dl)
  • main.cpp
#include <iostream>
#include <dlfcn.h>
#include "lib/Deal.hpp"

#define LIBPATH "./lib/libDeal.so"
typedef int (*DataDecFun)(int);

int main() 
{
	int data = 7;
	int dataDone = DataInc(data);
	std::cout << "DataInc result: " << dataDone << std::endl;

	void* handle = dlopen(LIBPATH, RTLD_LAZY);
	DataDecFun _DataDec = (DataDecFun) dlsym(handle, "DataDec");
	if (NULL == _DataDec)
	{
		std::cerr << "failed to load fun DataDec from  " << LIBPATH << std::endl;
		return -1;
	}

	dataDone = _DataDec(data);
	std::cout << "DataInc result: " << dataDone << std::endl;
	
	dlclose(handle);
  	return 0;
}
  • result
    在这里插入图片描述

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

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

相关文章

小程序大作用:教师得力助手

学生成绩查询小程序&#xff0c;一种快捷便利的工具&#xff0c;可以帮助老师们更好地了解学生的学习状况。今天教给各位老师如何制作这样一个小程序&#xff0c;并提供实用的建议。当然&#xff0c;对于许多老师而言&#xff0c;使用现成的工具是更为高效便捷的选择。 今天我为…

for forin forof forEach map区别

一、总结 相同点&#xff1a;都是串行遍历。不同点&#xff1a; 二、for of循环 设计目的&#xff1a;遍历所有数据结构的统一方法。原理&#xff1a;会调用数据结构的Symbol.iterator方法。 只要数据结构定义了Symbol.iterator属性&#xff0c;就能用for of遍历它的成员。…

循环神经网络-简洁实现

参考&#xff1a; https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/rnn-concise.html https://pytorch.org/docs/stable/generated/torch.nn.RNN.html?highlightrnn#torch.nn.RNN RNN import torch from torch import nn from torch.nn import functional as F from…

安防监控视频云存储平台EasyNVR对接EasyNVS时,一直不上线该如何解决?

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。 近期有用户在使用安防视频平台EasyNVR对接上级平台EasyNVS时&#xff0c;出现了一直不上线…

文档丢失怎么找回?学会这3个方法就足够!

场景1&#xff1a;“不是吧&#xff01;我辛辛苦苦写的文档好像忘记保存就退出了&#xff01;谁能救救我&#xff01;帮我找回丢失的文档&#xff1f;” 场景2&#xff1a;“电脑里的文档太多了&#xff0c;每次在清理时都容易误删。有什么方法可以找回我丢失的文档吗&#xff…

iPhone密码忘了怎么办?这3招已足矣

很急&#xff01;之前改了手机密码&#xff0c;现在完全想不起来。该试的数字也都试过了&#xff0c;根本没用&#xff0c;求一个能解锁iPhone手机的方法&#xff01;感谢&#xff01; iPhone手机的锁屏密码是一个保护用户隐私的功能。如果没有锁屏密码给手机上一道“锁”&…

JavaScript系列从入门到精通系列第二篇:JavaScript书写位置、注释和结束符

文章目录 一&#xff1a;JavaScript书写位置 1&#xff1a;CSS书写位置 (一)&#xff1a;行内样式表 (二)&#xff1a;内部样式表 (三)&#xff1a;外部样式表 2&#xff1a;Js书写位置 (一)&#xff1a;行内样式表 (二)&#xff1a;内部样式表 (三)&#xff1a;外部样…

Cesium 地球(1)-概览

​ 参考: CesiumJS 2022^ 源码解读[4] - 最复杂的地球皮肤 影像与地形的渲染与下载过程 Cesium 地球(1)-概览 相关类的从属关系: 地球由 影像数据&#xff0c;和地形数据共同组成。 流程概览: // Scene.jsfunction render() {// ① 更新影像图层的可见性globe.update();/…

java-decompiler

Java Decompiler GitHub F:\Document_JD-GUI\jd-gui-windows-1.4.0

73家央国企专场培训|第38期信创专业人员-精华班在京成功举办

9月8日-10日&#xff0c;由太极计算机股份有限公司-太极信创研习院(以下简称“太极股份”&#xff09;主办&#xff0c;北京慧点科技有限公司协办的“信息技术应用创新专业人员&#xff08;ITAIP&#xff09;-第38期信创精华班&#xff08;央国企专场培训&#xff09;”在北京市…

[游戏开发][Shader]ShaderToy通用模板转Unity-CG语言

这个通用模板貌似是Candcat写的&#xff0c;漏了几个宏定义&#xff0c;我这给补一下&#xff0c;例如&#xff1a; #define iTime _Time.y #define atan atan2 对照表如下 代码如下 Shader "Shadertoy/Template" {Properties{iMouse("Mouse Pos", Vec…

恩智浦为稳固地位,将扩大投资4国家 | 百能云芯

车用芯片制造商恩智浦&#xff0c;今天宣布了一项重大计划&#xff0c;旨在进一步深耕欧洲市场。该公司将利用欧洲微电子和通信技术共同利益重点计划&#xff08;IPCEI ME/CT&#xff09;的支持&#xff0c;加强其在奥地利、德国、荷兰和罗马尼亚的研发能力&#xff0c;并将根据…

MySQL数据库详解 五:用户管理

文章目录 1. 数据库的用户管理1.1 新建用户1.2 重命名用户1.3 删除用户1.4 修改用户密码1.5 忘记用户密码的解决方法1.6 数据库用户授权1.6.1 授权用户权限类别1.6.2 添加权限1.6.2 撤销权限 2. mysql命令 1. 数据库的用户管理 1.1 新建用户 create user 用户名来源地址 [ide…

性能测试必备知识-使用MySQL存储过程构造大量数据:实例解析

在软件开发过程中&#xff0c;测试是一个不可或缺的环节。通过测试&#xff0c;我们可以发现并修复软件中的各种问题&#xff0c;提高软件的质量和稳定性。然而&#xff0c;手动编写大量的测试用例是一项耗时且容易出错的任务。为了解决这个问题&#xff0c;我们需要学会使用批…

一文了解线上展厅设计与搭建要点,线上展厅有哪些应用

引言&#xff1a; 线上展厅已经成为了现代营销领域中不可或缺的一部分。通过巧妙的设计与搭建&#xff0c;企业可以与潜在客户建立更深入的联系&#xff0c;提高品牌知名度&#xff0c;从而提高商务成交量。 一、线上展厅设计要点 线上展厅的设计是关键的一步&#xff0c;因为…

架构师面试必备:高并发限流算法全攻略

Hello大家好&#xff0c;我是小米&#xff01;今天我要和大家聊一聊一个在技术面试中经常被问到的问题——高并发限流算法&#xff01;这个话题非常有趣&#xff0c;也是我们在日常工作中经常会碰到的挑战之一。在本文中&#xff0c;我将详细介绍一些常见的高并发限流算法&…

无涯教程-JavaScript - SUMIF函数

描述 您可以使用SUMIF函数对满足指定条件的范围内的值求和。 语法 SUMIF (range, criteria, [sum_range])争论 Argument描述Required/Optionalrange 您要通过条件判断的单元格范围。 每个范围中的单元格必须是数字或包含数字的名称,数组或引用。 空白和文本值将被忽略。 所…

AMEYA360:村田土壤传感器新增功能

村田制作所新增了土壤传感器功能&#xff0c;除了以前的普通土壤外&#xff0c;还可对人工培养土岩棉、椰糠进行测量。 近年来&#xff0c;对番茄、草莓等农作物广泛使用配制营养土岩棉及椰糠等人工培养土。相较普通培养土&#xff0c;此类培养土的保水力非常高&#xff0c;且难…

面试官:Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 开始之前 正文 一、Options Api 二、Composition Api 三、对比 逻辑组织 Options API Compostion API 逻辑…

vue select联动 设置filterable坑

需求&#xff1a; 平台改变 获取服务类目List 服务类目改变 获取模板标题List 模板标题改变 获取关键词List 由于模板标题List数据条数较多&#xff0c;因此需要设置可搜索选择 问题&#xff1a;由于模板标题加了【filterable】属性。当服务类目改变时&#xff0c;模板标题要么…