适用VS2019尝试生成跨平台的动态库

news2025/9/18 18:52:08

文章目录

  • 1、
  • 2、步骤
    • 2.1 创建一个CMake项目
    • 2.2 写一个简单的计算加法的函数
    • 2.3 调整CMakeLists.txt
    • 2.4 Windows下编译x86的库
      • 2.4.1 配置x86-release
      • 2.4.2 选择启动项
      • 2.4.3 生成动态库
    • 2.5 linux下编译动态库
      • 2.5.1 参考2.4.1设置Linux-GCC-Release配置X64
      • 2.5.2 配置远程linux计算机
      • 2.5.3 选择项目配置,生成动态库

1、

2、步骤

2.1 创建一个CMake项目

VS2019菜单栏——新建——项目
在这里插入图片描述

在搜索栏输入cmake,双击出现的CMake项目
在这里插入图片描述
配置好项目的名称和路径,点击创建
在这里插入图片描述
创建好的项目的目录层次如下:
在这里插入图片描述

testDll目录下的CMakeLists.txt内容如下:

# CMakeList.txt: testDll 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

# 将源代码添加到此项目的可执行文件。
add_executable (testDll "testDll.cpp" "testDll.h")

# TODO: 如有需要,请添加测试并安装目标。

和testDll目录同级的CMakeLists.txt内容如下:

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)

project ("testDll")

# 包含子项目。
add_subdirectory ("testDll")

2.2 写一个简单的计算加法的函数

在testDll.h中添加:

#ifdef _WIN32
_declspec(dllexport) int add(int a, int b);
#endif // _WIN32

#ifdef __linux__
int add(int a, int b);
#endif

在testDll.cpp中添加:

int add(int a, int b)
{
	return a + b;
}

2.3 调整CMakeLists.txt

调整为

# CMakeList.txt: testDll 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

# 将源代码添加到此项目的可执行文件。
project(add)
# 将源代码添加到此项目的可执行文件。
add_library(testdll SHARED "testDll.cpp" "testDll.h")

# TODO: 如有需要,请添加测试并安装目标。

就是将原有的

add_executable (testDll "testDll.cpp" "testDll.h")

删除掉,改成了

project(add)
# 将源代码添加到此项目的可执行文件。
add_library(testdll SHARED "testDll.cpp" "testDll.h")

2.4 Windows下编译x86的库

2.4.1 配置x86-release

需要x86-release的配置,这里没有因此需要添加,如果有的话可跳过
在这里插入图片描述
配置页面左上角点击“+”号,在弹出页面选择需要的配置,之后点击"选择”按钮
在这里插入图片描述
就会在左边的展示栏中出现选中的配置
在这里插入图片描述

接着Ctrl+s保存修改,这里主要是修改了CMakeSettings.json文件。保存之后会自动生成CMake。
注:切换配置时也会重新生成

2.4.2 选择启动项

在这里插入图片描述
在自动执行CMake生成之后这里就有这个dll了,接着点击选中,选择启动项的位置就变了
在这里插入图片描述

2.4.3 生成动态库

Ctrl+b,VS就会生成dll了。如果代码有错误,可根据提示修改,直至编译正常。

2.5 linux下编译动态库

注:要先确保远程的linux系统存在以下工具集:
cmake、gcc、gdb、rsync、zip、ninja-build

没有的话可以使用以下命令安装:
根据linux系统选择使用apt还是yum

sudo apt update
sudo apt install -y build-essential gdb rsync zip openssh-server

sudo yum update
sudo yum install -y build-essential gdb rsync zip openssh-server 

2.5.1 参考2.4.1设置Linux-GCC-Release配置X64

在这里插入图片描述

2.5.2 配置远程linux计算机

如果本机是linux系统的另说
VS菜单栏:工具——选项——跨平台——连接管理器——点击添加,填入远程计算机的ip、端口、用户名、密码即可,点击确定关闭页面
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
接着点最下面的高级选项
在这里插入图片描述
IntelliSense模式选择linux-gcc-x64,CMake可执行文件填写对应的路径,可以适用which命令查看
在这里插入图片描述
在这里插入图片描述
保存修改

2.5.3 选择项目配置,生成动态库

选择Linux-GCC-Release,CMake会执行执行,等待完成
在这里插入图片描述
CMake完成后选择启动项的位置出现.so文件
在这里插入图片描述
查看日志提示编译生成的相关文件在/home/test/.vs/testDll/e0783f20-c071-4a34-aeae-f53e004596a6/out/build/Linux-GCC-Release,到目录下看看
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
目录下以及testDll目录下都没有.so文件。
是的,没有,因为我们还在执行生成动态库的步骤呢。。接下来回到VS生成项目
在这里插入图片描述
在这里插入图片描述

再去对应目录看看
在这里插入图片描述

到这里,再不修改任何代码的前提下,就完成了一个跨平台的动态库的编译了

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

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

相关文章

r语言数据分析案例25-基于向量自回归模型的标准普尔 500 指数长期预测与机制分析

一、背景介绍 2007 年的全球经济危机深刻改变了世界经济格局,引发了一系列连锁反应,波及各大洲。经济增长停滞不前,甚至在某些情况下出现负增长,给出口导向型发展中国家带来了不确定性。实体经济受到的冲击尤为严重,生…

Python学习笔记8:入门知识(八)

前言 本篇是元组的知识点学习以及知识点的补充 元组 概念 不可变的列表,叫做元组。 在之前列表的特性中,我们就说过列表是可变的,但是在实际使用过程中,我们有时候仍然需要一系列不可变的元素,这个时候就需要元组出…

每日5题Day24 - LeetCode 116 - 120

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) /* // Definition for a Node. class Node {public int val;public Node left;…

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

the histogram of cross-entropy loss values 交叉熵损失值的直方图以及cross-entropy loss交叉熵损失

交叉熵损失值的直方图在机器学习和深度学习中有几个重要的作用和用途: 评估模型性能: 直方图可以帮助评估模型在训练数据和测试数据上的性能。通过观察损失值的分布,可以了解模型在不同数据集上的表现情况。例如,损失值分布的形状和范围可以反…

2024 Idea最新激活码

idea的激活与安装 操作如下: ① 打开网站:https://web.52shizhan.cn 切换到:激活码,点击获取 ② 这个时候就跳转到现成账号页面,点击获取体验号,如图 ③ 来到了获取现成账号的页面了。输入你的邮箱账号即…

uni app 自定义 带popup弹窗的input组件

工作需要。自定义了个带popup弹窗的input组件。此组件满足个人需求&#xff0c;不喜勿喷。应该可以看明白怎么回事&#xff0c;也能自己改改&#xff0c;所以就不要联系了&#xff0c;点赞收藏就好 <template><view class"dialog_main"><input v-mod…

【第七篇】SpringSecurity核心组件和核心过滤器

一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用SpringSecurity XML命名空间进行配置或者SpringSecurity的<br />J…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …

ESP32基础应用之esp32连接腾讯云并使用微信小程序控制的智能灯

文章目录 1. 项目简介1.1 功能接收1.2 使用资源1.3 测试平台 2 腾讯云物联网开发平台3 esp32设备开发3.1 准备参考例程3.2 vscode平台创建测试工程3.3 修改工程 问题总结使用PowerShell命令行终端生成的二维码不能用 1. 项目简介 1.1 功能接收 实现腾讯云创建项目与设备&…

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

Qt创建静态库及静态库使用

Qt创建静态库及静态库使用 1. 创建一个库文件 选择静态库 将需要打包的.h 和.cpp文件添加到程序中&#xff0c; 在编译器版本下的debug和release模式下分别编译&#xff08;右键项目&#xff0c;点击“qmake”,再点击“构建”&#xff09;后&#xff0c;在对应的的build目录下…

区间分割求解方程

本文实现了基于mpi4py的多进程算法 mpi不过多介绍&#xff0c;某些函数的用法也不是介绍范围&#xff0c;这里只给出怎么实现多进程的方程求根算法。区间划分求解方程&#xff0c;在串行程序里&#xff0c;二分法是非常经典的算法&#xff0c;现在对其进行拓展&#xff0c;实现…

Kubrnetes APIServe 监控

kube-apiserver组件监控指标及大盘使用说明_容器服务 Kubernetes 版 ACK(ACK)-阿里云帮助中心 kube-apiserver组件提供了Kubernetes的RESTful API接口&#xff0c;使得外部客户端、集群内的其他组件可以与ACK集群交互。本文介绍kube-apiserver组件的监控指标清单、大盘使用指导…

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求&#xff0c;常用做法是左侧显示子页面菜单&#xff0c;用户通过点击左侧菜单&#xff0c;实现右边子页面的展示。 实例项目实现&#xff1a; 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…

苹果设备上的livp格式是什么?怎么转换?

livp格式是苹果公司推出的一种图片格式&#xff0c;它允许用户在iOS设备上拍摄的照片中包含声音和动作&#xff0c;从而创造出一种动态的照片效果。 livp格式的照片不仅记录了图像&#xff0c;还记录了拍摄前后1.5秒的音频和视频&#xff0c;使得照片能够“活”起来。 ✨livp…

植物大战僵尸(杂交版)最新版V2.1来袭!

【新手指导】最新版v2.1来袭 1.闪退怎么办&#xff1f; 答:窗口模式可以解决大部分问题。输入法转换成英文也可以。最后一种办法管理员运行&#xff0c;再后台可运行&#xff0c;即便不是窗口也不会闪退&#xff0c;亲测有效 2.哪里下载&#xff1f; 答&#xff1a;夸克网盘htt…

【Android】实现Recyclerview的Item可以左右侧滑动的效果

项目需要 使用Recyclerview进行列表的数据加载的时候&#xff0c;需要对这个Item进行左右滑动进行操作的功能&#xff0c; 比如这样 需求实现 上面图来源于 https://github.com/anzaizai/EasySwipeMenuLayout 这是一个可以用来进行列表左滑、右滑的项目&#xff0c;可以集…