8-选择静态或共享库

    在本节中,我们将展示如何使用BUILD_SHARED_LIBS变量来控制add_library()的默认行为,并允许控制如何构建没有显式类型的库(STATIC、SHARED、MODULE或OBJECT)。
    要做到这一点,我们需要将BUILD_SHARED_LIBS添加到顶级的CMakeLists.txt中。我们使用option()命令是因为它允许用户选择该值是ON还是OFF。

// CMakeLists.txt
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

    接下来,我们需要为静态库和共享库指定输出目录。

// CMakeLists.txtset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

    最后,更新MathFunctions/MathFunctions.h以使用dll导出定义:

// MathFunctions/MathFunctions.h#if defined(_WIN32)
#  if defined(EXPORTING_MYMATH)
#    define DECLSPEC __declspec(dllexport)
#  else
#    define DECLSPEC __declspec(dllimport)
#  endif
#else // non windows
#  define DECLSPEC
#endifnamespace mathfunctions {
double DECLSPEC sqrt(double x);
}

    此时,如果您构建了所有内容,您可能会注意到链接失败,因为我们正在将不依赖位置的静态库与具有位置依赖的库组合在一起。解决这个问题的方法是在构建共享库时显式地将SqrtLibrary的POSITION_INDEPENDENT_CODE目标属性设置为True。

// MathFunctions/CMakeLists.txt# state that SqrtLibrary need PIC when the default is shared librariesset_target_properties(SqrtLibrary PROPERTIESPOSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS})

    定义EXPORTING_MYMATH,说明我们在Windows上构建时使用declspec(dllexport)。

// MathFunctions/CMakeLists.txt# define the symbol stating we are using the declspec(dllexport) when
# building on windows
target_compile_definitions(MathFunctions PRIVATE "EXPORTING_MYMATH")

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

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

相关文章

神经网络中的激活函数

目录 一、什么是激活函数:二、如何选择激活函数:1.Sigmoid激活函数:2.线性激活函数:3.ReLU激活函数: 一、什么是激活函数: 激活函数是神经网络中的一种函数,它在神经元中起到了非线性映射的作用…

最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

gitee上传和下载idea项目的流程

环境:idea2022 一、上传项目 1、在gitee中新建一个仓库。 2、打开所要上传的项目的文件夹,点击Git Bash,生成.git文件夹。 3、在idea中打开所要上传的项目,在控制台的Terminal菜单中,输入git add . (注意&#xf…

安防综合管理/视频汇聚平台EasyCVR视频监控存储技术:高效稳定的视频数据保障方案

随着科技的飞速发展,视频监控已成为现代社会不可或缺的一部分。无论是城市治安、交通管理,还是商业安保、家庭监控,视频监控都发挥着至关重要的作用。而在这背后,视频监控存储技术则是确保监控数据得以长期保存、高效检索和可靠利…

「C++系列」C++ 修饰符类型

文章目录 一、C 修饰符类型1. 访问修饰符(Access Modifiers)2. 存储类修饰符(Storage Class Specifiers)3. 类型修饰符(Type Modifiers)4. 函数修饰符 二、C 修饰符类型-案例1. 访问修饰符案例2. 存储类修饰…

精讲:java之多维数组的使用

一、多维数组简介 1.为什么需要二维数组 我们看下面这个例子?“ 某公司2022年全年各个月份的销售额进行登记。按月份存储,可以使用一维数组。如果改写为按季度为单位存储怎么办呢? 或许现在学习了一维数组的你只能申请四个一维数组去存储每…

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序,进入答题界面,运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…

Kubernetes(k8s)和Docker Compose本质区别

Kubernetes(k8s)和Docker Compose是两种不同的容器编排工具,它们有各自的特点和使用场景。 Kubernetes: Kubernetes是一个开源的容器编排平台,用于自动化计算机软件的部署、扩展和管理。它支持跨多个主机集群的容器化…

HarmonyOS Next 原生应用开发-从TS到ArkTS的适配规则(四)

一、不支持以#开头的私有字段 规则:arkts-no-private-identifiers 级别:错误 ArkTS不支持使用#符号开头声明的私有字段。改用private关键字。 TypeScript class C {#foo: number 42 }ArkTS class C {private foo: number 42 }二、类型、命名空间的命…

深入了解线程锁的使用及锁的本质

文章目录 线程锁的本质局部锁的使用 锁的封装及演示线程饥饿问题 线程加锁本质可重入和线程安全死锁问题 根据前面内容的概述, 上述我们已经知道了在linux下关于线程封装和线程互斥,锁的相关的概念, 下面就来介绍一下关于线程锁的一些其他概念. 线程锁的本质 当这个锁是全局的…

Codeforces Round #956 (Div. 2) and ByteRace 2024

A. Array Divisibility 思路: 找出特例,发现输出 1∼&#x1d45b; 符合题意。直接输出1~n即可. 代码: #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t;…

iOS 开发技巧 - 使用本地 json 文件

前言 使用本地 json 文件的场景&#xff0c;在我们开发功能的阶段&#xff0c;服务端接口字段定义好了后&#xff0c;有些接口响应很慢&#xff0c;请求到响应可能要 几十秒甚至一分钟&#xff0c;我们需要频繁调用接口来调试功能&#xff1b;还有就是调用一些我们需要付费的三…

Ubuntu20.04下修改samba用户密码

Ubuntu20.04下修改samba用户密码 在Ubuntu系统中&#xff0c;修改samba密码通常涉及到两个方面&#xff1a;更改samba用户的密码和重置samba服务的密码数据库。以下是如何进行操作的步骤&#xff1a; 1、更改samba用户密码&#xff1a; 打开终端&#xff0c;使用以下命令更改…

vue打包terser压缩去除控制台打印和断点

情况一&#xff1a; 1、vue-cli搭建 代码压缩工具terser在vue-cli里面是自动支持的&#xff0c;所以直接在vue.config.js里面加入下面配置&#xff1a; const {defineConfig} require(vue/cli-service) module.exportsdefineConfig({transpileDependencies:true,terser:{te…

看影视学英语(假如第一季第一集)

in the hour也代表一小时吗&#xff1f;等同于in an hour&#xff1f;

activemq-CVE-2022-41678

Apache ActiveMQ Jolokia 后台远程代码执行漏洞 Apache ActiveMQ在5.16.5&#xff0c;5.17.3版本及以前&#xff0c;后台Jolokia存在一处任意文件写入导致的远程代码执行漏洞。 启动环境 admin/admin 方法一&#xff1a;利用poc 这个方法受到ActiveMQ版本的限制&#xff0c;因…

Linux 创建新虚拟机的全过程图解

一、创建新虚拟机 1.选择自定义 2.直接下一步 3.选择稍后安装 4.设置虚拟机名和安装位置 5.配置处理器&#xff08;处理器数量&#xff1a;4、每个处理器的内核&#xff1a;2&#xff09; 6. 内存选择 7.网络类型 8. IO控制器类型-默认推荐 9.磁盘类型-默认推荐 10.选择虚拟磁…

JS代码动态打印404页面源码

JS代码动态打印404页面源码&#xff0c;适合做网站错误页&#xff0c;具有js动态打印效果&#xff0c;喜欢的朋友可以拿去 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务…

Redis 7.x 系列【22】主从复制配置项

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 配置说明2.1 replicaof2.2 masterauth2.3 masteruser2.4 replica-serve-sta…

Linux udp编程

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…