使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
vcpkg
的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。
链接错误症状
以tinyxml2
为例,程序中调用tinyxml2
的函数后,若vcpkg中同时存在opencv
和boost
库,自动链接会把本不需要的这两个库的lib也链接上,导致最后生成的可执行程序exe也依赖opencv
和boost
的动态库dll。
主程序:
#include <iostream>
#include <tinyxml2.h>int main()
{tinyxml2::XMLDocument doc;std::cout << "Hello World!\n"; return 0;
}
错误链接boost后,由于boost某些头文件还包含了BOOST_DLLEXPORT(也就是__declspec(dllexport))字段,会导致生成.exe的同时还生成.lib和.exp文件,非常烦人:
链接错误原理
vcpkg
的自动链接功能是通过遍历所有的.lib
文件实现的,为程序引用的符号找到对应依赖库。
上述错误是由于tinyxml2
引用的某些函数所引用的函数在其他.lib
中首先被找到——即tinyxml2引用的某些函数同时在opencv和boost库中也有定义,遍历时后者的.lib先于tinyxml2.lib被找到,从而导致链接了opencv和boost的.lib文件而未链接tinyxml2.lib,进而仅拷贝了opencv和boost的动态库。
解决方法
对症下药,提供两种方法避免链接错误。
方法一:不关闭自动链接功能,在链接器-输入
中指定tinyxml2.lib
。链接器-输入
指定的库链接优先级高于vcpkg的自动链接,因此链接器首先从tinyxml2.lib中找到了所需函数后,就终止遍历、不再搜索boost或opencv等vcpkg环境中其他lib里的函数表,最后只链接tinyxml2.lib。
方法二:关闭自动链接功能,在链接器-输入
中指定所依赖库的.lib文件。推荐在方法一不奏效时使用。
vcpkg自动链接功能
vcpkg
是一个跨平台的c++库工具链,提供了c++库的编译、安装和配置等功能,可以与MSBuild(VS)、CMake等工具集成使用,非常方便。
以VS为例,vcpkg在项目属性中提供了一系列的功能开关,以使用户更方便地使用库:
其中的开关顾名思义,例如“Use Vcpkg”即控制是否在当前项目中使用Vcpkg;“Use AutoLink”控制是否自动链接项目所需.lib库而不需要手动在链接器-输入
中指定。这两个开关默认都是开启状态。
自动链接功能在项目需要依赖包含多个.lib的库时特别有用,例如点云处理算法库pcl。
pcl
在编译时就需要依赖Boost、Eigen、Vtk等库,编译完成后生成一大堆.lib和.dll。
若没有vcpkg,使用pcl库时更是需要在链接器-输入
中按需列上boost、vtk和pcl自身的诸多.lib文件,例如:
为避免重复工作,多数人选择使用项目属性表将上面的配置记录下来,以便后续项目使用。
**但是,**在有了vcpkg之后,链接工作就大大简化了。vcpkg提供的自动链接功能会遍历所有lib文件,找到项目所引用函数后将对应lib自动链接上,不需要用户手动指定链接哪一个lib,非常省心。
并且,在编译生成可执行程序后,vcpkg还会自动将依赖的动态库拷贝到可执行程序所在目录,方便运行。以包含了OpenCV库的项目为例,编译生成的结果如下图所示:
可见,opencv的一系列动态库和依赖的jpeg、png库都被拷贝到exe旁边了。
相关文章:
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…...
【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门
在数字图像处理中,形态学操作是一种常用的技术,用于提取图像中的特定形状或特征。其中,腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中…...
道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
道可云元宇宙每日简报(2024年11月27日)讯,今日元宇宙新鲜事有: 工信部等十二部门印发《5G规模化应用“扬帆”行动升级方案》 11月25日,工业和信息化部等十二部门印发《5G规模化应用“扬帆”行动升级方案》。《方案》…...
若依框架部署在网站一个子目录下(/admin)问题(
部署在子目录下首先修改vue.config.js文件: 问题一:登陆之后跳转到了404页面问题,解决办法如下: src/router/index.js 把404页面直接变成了首页(大佬有啥优雅的解决办法求告知) 问题二:退出登录…...
【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)
插件还是老朋友。 节点的content type要打对。 (参照表:MIME 类型(MIME Type)完整对照表 - 免费在线工具) 结果展示:...
对比C++,Rust在内存安全上做的努力
简介 近年来,越来越多的组织表示,如果新项目在技术选型时需要使用系统级开发语言,那么不要选择使用C/C这种内存不安全的系统语言,推荐使用内存安全的Rust作为替代。 谷歌也声称,Android 的安全漏洞,从 20…...
如何利用 Qt 的模块化架构组织大型项目
目录 1. 大型项目的架构设计 1.1 分层架构 1.2 事件驱动与异步架构 2. 模块划分与职责分离 2.1 功能模块划分 2.2 模块之间的依赖管理 3. 跨平台开发与模块复用 在大型软件项目中,随着代码量的增加和功能的扩展,项目的复杂度会显著提升。没有良好…...
探索Python词云库WordCloud的奥秘
文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…...
MySQL根据idb文件恢复数据
首先得有对应表的idb文件以及建表语句 1.首先在新数据库建表 CREATE TABLE sys_menu (id bigint(20) NOT NULL,parent_id bigint(20) NULL DEFAULT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,type int(11) NULL DEFAULT …...
hadoop-mapreduce词频统计
一、Map Reduce主要阶段 二、词频统计示例 0.MapReduce 词频统计(Word Count)示例图 1. Input 阶段(输入阶段) 输入数据是一段文本,如下: Hadoop is a big data framework. Hadoop can store vast data. Hadoop processes big …...
精心修炼Java并发编程(JUC)-volatile与synchronized关键字
volatile volatile 是 JVM 提供的 最轻量级的同步机制,中文意思是不稳定的,易变的,用 volatile 修饰变量是为了保证变量在多线程中的可见性,它表达的含义是:告诉编译器,对这个变量的读写,需要基…...
【ROS2】ROS2 与 ROS1 编码方式对比(Python实现)
目录 一、初始化和关闭节点二、发布者三、订阅者四、服务端五、客户端六、参数管理七、日志记录八、生命周期管理 ROS2 在 Python 编程中引入了一些新的概念和 API,这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制&a…...
ElasticSearch的下载和基本使用(通过apifox)
1.概述 一个开源的高扩展的分布式全文检索引擎,近乎实时的存储,检索数据 2.安装路径 Elasticsearch 7.8.0 | Elastic 安装后启动elasticsearch-7.8.0\bin里的elasticsearch.bat文件, 启动后就可以访问本地的es库http://localhost:9200/ …...
城市轨道交通运营控制指挥中心设计方案
为某城市轨道交通运营控制指挥中心(OCC)的设计提供方案时,我们需要考虑到多个方面的需求,包括系统架构、设备选择、功能实现、数据流与监控、通信管理等。以下是一个综合性的设计方案,涉及系统硬件和软件的选择、布局规划、安全性等方面,以确保指挥中心的高效运作、实时监…...
多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
一、河马优化算法 河马优化算法(Hippopotamus optimization algorithm,HO)由Amiri等人于2024年提出的一种模拟自然界中河马觅食行为的新型群体智能优化算法。该算法由Mohammad Hussein Amiri等人于2024年2月发表在Nature旗下子刊《Scientifi…...
线程与进程的个人理解
进程(Process): 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特…...
vscode的项目给gitlab上传
目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客) 三.Windows电脑安…...
企业微信定位打卡
废话少说:定位修改软件链接奉上 一、定位打卡原理 GPS定位:企业微信可以利用手机的GPS功能进行定位,这是一种基于卫星的定位技术,能够提供相对精确的位置信息,通常精确度在20米以内。这种方式耗电较大,且在…...
libaom 源码分析:码率控制介绍
码率控制 命令行码率控制选项:可以看到码率控制包括丢帧、resize、超分、码控模式、目标码率、目标上限下限(类似 x264、x265 中的 VBV)、码控偏置、GOP 码率等。Rate Control Options:--drop-frame=<arg> Temporal resampling threshold (buf %)--resize-mo…...
RK3568平台开发系列讲解(DMA篇)DMA engine使用
🚀返回专栏总目录 文章目录 一、申请DMA channel二、配置DMA channel的参数三、获取传输描述(tx descriptor)四、启动传输沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DMA子系统下有一个帮助测试的测试驱动(drivers/dma/dmatest.c), 从这个测试驱动入手我们了解…...
C++中的函数对象
C 中函数对象的定义和特点 定义:函数对象(Function Object)也叫仿函数(Functor),是一个类,这个类重载了函数调用运算符()。当创建这个类的对象后,可以像使用函数一样使用这个对象&am…...
Linux指标之平均负载(The Average load of Linux Metrics)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
盛最多水的容器
本节将数组与坐标轴共同组成一个容器,通过改变容器的两个端点使容器装的水最多,容器两个端点不断移动可以通过左右指针算法解决. 问题描述: 给定两个非负整数k1,k2...km每个数代表坐标中的一个点(i,ki).在坐标内绘制m条垂线,垂直线i的两个端点分别为(i,k1)和(i,0)找出其中的两…...
光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式…...
java全栈day10--后端Web基础(基础知识)
引言:只要能通过浏览器访问的网站全是B/S架构,其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址:Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程,建议…...
使用爬虫时,如何确保数据的准确性?
在数字化时代,数据的准确性对于决策和分析至关重要。本文将探讨如何在使用Python爬虫时确保数据的准确性,并提供代码示例。 1. 数据清洗 数据清洗是确保数据准确性的首要步骤。在爬取数据后,需要对数据进行清洗,去除重复、无效和…...
Burp入门(4)-扫描功能介绍
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:burp功能介绍(1)_哔哩哔哩_bilibili 本文介绍burp的主动扫描和被动扫描功能。 一、主动扫描 工作原理: 主动…...
Tourtally:颠覆传统的AI智能旅行规划革命
# Tourtally:颠覆传统的AI智能旅行规划革命 在快速变化的旅行科技世界里,一个划时代的平台正在重新定义我们探索世界的方式。让我们一起认识 Tourtally,这个由人工智能驱动的旅行规划助手,正在彻底改变旅行体验。 ## 旅行规划的…...
chrome允许http网站打开摄像头和麦克风
第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址,点击启用 第三步 重启 Chrome:设置完成后,点击页面底部的 “Relaunch” 按钮,重新启动 Chrome 浏览器,使更改生效。...
视觉经典神经网络与复现:深入解析与实践指南
目录 引言 经典视觉神经网络模型详解 1. LeNet-5:卷积神经网络的先驱 LeNet-5的关键特点: 2. AlexNet:深度学习的突破 AlexNet的关键特点: 3. VGGNet:深度与简洁的平衡 VGGNet的关键特点: 4. ResNe…...
江都住房和建设局网站/聊石家庄seo
最近在完成移动智能终端安全的课程实验时研究了一下smali的语法,顺便记录一下几个比较具有迷惑性的地方 比如以下两行代码: invoke-virtual {p0, v0}, Lcom/example/smali/MainActivity;->setContentView(I)V 复制代码iput-object v0, p0, Lcom/examp…...
崇明建设镇政府工作网站/搜索引擎优化排名技巧
数据类型分为两种基础类型和引用类型: 1、基础类型:像Number、String、Boolean等这种为基本类型 2、引用类型:Object和Array 浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的…...
属于垂直型b2b网站的有/地方网站建设
今天读代码时,忽然跳出如下一条指令>> 汇编代码: rep stos dword ptr es:[edi] 在网上查了相关资料显示: /************************************************************/lea edi,[ebp-0C0h] mov ecx,30h mov eax,0CCCCCCCCh rep stos dword ptr es:[ed…...
新办公司网上核名在哪个网站做/百度站长工具怎么关闭教程视频
原文地址为: 从Matlab的for循环说开……因为学习和工作的原因,最近又开始使用已经许久没有接触的Matlab。在没有什么特殊考虑的情况下,信手写下了下面的m代码片段: 1 for i 1 : 1 :(imgHeight - tmpHeight 1 ) 2 for j 1 : 1…...
政府网站建设 报价/营销策划品牌策划
1 安装 参见WSO2 ESB 4.8.0 文档Installing the Product部分。 1.1 安装要求 1.1.1 系统要求 操作系统 l Microsoft Windows l Linux (Ubuntu, Fedora, Gentoo, SUSE, and Debian, and so on) l Oracle Solaris and l Mac OS X 内存 l 最小2 GB l 堆内存最小512MB&#…...
无障碍网站建设的意义/网站模板套用教程
微信小程序设计指南 基于微信小程序轻快的特点,我们拟定了小程序界面设计指南和建议。 设计指南建立在充分尊重用户知情权与操作权的基础之上。旨在微信生态体系内,建立友好、高效、一致的用户体验,同时最大程度适应和支持不同需求࿰…...