QT使用腾讯云对象存储SDK报错:`undefined reference to qcloud_cos`

news2024/11/13 15:55:22

QT使用腾讯云对象存储SDK编译时报错:undefined reference to qcloud_cos

文章目录

  • QT使用腾讯云对象存储SDK编译时报错:`undefined reference to qcloud_cos`
    • 问题1:在VS中编译cossdk报错`LNK1104 无法打开文件“PocoFoundationd.lib”`
    • 问题2:在QT中引入头文件编译报错: `fatal error: cos_api.h: No such file or directory`
    • 问题3:qt编译报错`undefined reference to qcloud_cos...`
      • 问题 3.1 下载poco源代码编译未生成`PocoCrypto.lib、PocoNetSSL.lib`
      • 问题3.2 解决qt报错`undefined reference to qcloud_cos...`
      • 问题3.3 QT安装了MSVC2017却无法使用
    • 问题4: 编译过程中大量报错`C2065、C2614、未声明标识符`等。
    • 问题5:编译成功,执行闪退。

前情提要:因为需要在qt中开发云存储项目,所以使用了腾讯云SDK,没想到问题百出,记录一下过程中遇到的问题。

我的环境是:

  • window11

  • cmake version 3.29.3

  • Visual Studio2022

  • QMake version 3.1

  • qt 5.12.10

如果有帮到您的话,请点个赞哦~

问题1:在VS中编译cossdk报错LNK1104 无法打开文件“PocoFoundationd.lib”

image-20240805130822536

报错样例
  • 解决办法:官方下载的sdk只允许进行Release 编译,记得更改。同样的,在QT中使用该SDK也只允许release构建/运行。

image-20240805130836262

Tips: 如果需要debug的话,请按照官方文档重新配置:Windows Debug 版本编译指南 。这个我目前还没试过,估计也是很坑

问题2:在QT中引入头文件编译报错: fatal error: cos_api.h: No such file or directory

解决办法:

  1. 将编译好的cossdk下的include、libs、third_party三个目录移动到工程目录下,并且将编译好的cossdk.lib放到libs目录下

image-20240805131412198

image-20240805131557251

  1. 在qt项目中右键“添加库”,导入库文件和头文件目录,这里会自动添加cossdk的include,此外还要额外添加third_party下面的include目录

在这里插入图片描述

INCLUDEPATH += $$PWD/third/cos/include \
    $$PWD/third/cos/third_party/include	 # 额外手动添加的
DEPENDPATH += $$PWD/third/cos/include \
    $$PWD/third/cos/third_party/include		# 额外添加的

Tips: 如果后续提示找不到Poco库(如报错:C1083:无法打开包括文件:“Poco/JSON/…”)也可以用同样的方式导入头文件和库

问题3:qt编译报错undefined reference to qcloud_cos...

image-20240805132142169

真正的重头戏来了,遇到这个问题的同学请注意!

请看官方文档:C++ SDK 常见问题

在这里插入图片描述

官方文档上说:这种情况一般是因为工程自带的 libcossdk.a 编译使用的 gcc 版本与客户机器上的 gcc 版本不一致导致的,需要客户重新编译 poco 库和 libcossdk。

实际上我并没有按照他给出的方法解决问题,我从openssl开始编译,然后编译poco文件,然后编译cossdk,最后放到qt上依然会报错。

因为大家不一定和我的问题是同一个问题,所以我会在本节记录一下我编译过程中遇到的问题,给选择编译路线的小伙伴一些提示。在之后我会给出我真正解决问题的方法。

问题 3.1 下载poco源代码编译未生成PocoCrypto.lib、PocoNetSSL.lib

网络上编译Poco的教程很多,不作详细介绍,简单步骤为:

  • 下载源码
  • 创建cmake-build文件,在该目录下执行cmake命令
  • 用VS打开生成的.sln工程生成解决方案。

在这个过程中可能会遇到没有生成PocoCrypto.lib、PocoNetSSL.lib的情况。(cmake的日志中没有显示:-- Building: NetSSL_OpenSSL -- Building: Crypto

这是因为系统中没有openssl,需要先安装openssl配置在环境中。

配置openssl还没有生成的话,可以在cmake命令中强行指定

# 简单版本  D:\OpenSSL-Win64为你的openssl安装目录
cmake .. -DOPENSSL_ROOT_DIR=D:\OpenSSL-Win64 -DENABLE_NETSSL=ON -DENABLE_CRYPTO=ON

# 指定编译架构和vs版本
cmake -G "Visual Studio 17 2022" .. -DOPENSSL_ROOT_DIR=D:\OpenSSL-Win64 -DENABLE_NETSSL=ON -DENABLE_CRYPTO=ON

问题3.2 解决qt报错undefined reference to qcloud_cos...

问题定位:

  • 一开始我以为是官方说的,得自己编译poco然后替换cossdk中的文档,但是依然报错。
  • 我开始排查是否是qt编译器的问题,所以在vs中创建了一个小工程验证,果然vs可以编译通过。
  • 原因应该是:cossdk使用mvsc编译的,但是我在qt中使用的mingw构建,所以失败。

可以尝试切换 MSVC2017 64bit这个方式

image-20240805161414211

问题继续:

  1. 一开始我的QT MSVC2017是不用的,虽然我在安装的时候勾选了此项,如果一开始安装QT没有勾选MSVC编译,需要另行找办法。
  2. 也可能,跟我的QT一样,虽然有这个编译选项,但是无法选择,也无法编译成功,请继续查看问题3.3

问题3.3 QT安装了MSVC2017却无法使用

根因:VS编译版本不匹配

image-20240805161910930

解决步骤:

1、没有VS需要下载对应版本的VS,用VS但是没有该版本的话,下载插件

  • 打开vs installer

image-20240805162101013

  • 点击修改

image-20240805162242220

  • 找到对应的msvc进行下载安装。

image-20240805162325001

  • 下载Windows sdk并安装

2、记下两个目录

  • vs更新插件的目录,你的目录在上图右下角,在这个目录下找到这个文件
C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat
  • Windows SDK的安装目录,虽然通常会自动识别,但最好还是记录一下:
D:\Windows Kits\10\Debuggers\x64\cdb.exe 

3、一切准备就绪,最好重启一下

3、打开QT Creator进行配置

  • 打开: 工具->选项->Kits -> 编译器

image-20240805162928721

  • 点击右侧添加 -> MVSC,按照我的配置和你的目录进行配置

image-20240805163043611

  • 回到Kits首页,配置Compiler和Debugger

image-20240805163150943

这样应该可以构建成功了,如果还有问题的话,通常是库文件的换行符问题,可以查看后续的问题4。

如果是执行闪退请跳转到问题5。

问题4: 编译过程中大量报错C2065、C2614、未声明标识符等。

原因:sdk源码的换行符问题,换行符为LF。

解决办法:批量更换换行符为CR LF,查看博客——批量转换 LF 和 CRLF 的小技巧【详细步骤】

简单来说就是:

  • 下载Dos2Unix

  • 把安装好的软件bin目录加入环境变量

  • 用cmd打开需要 更换的文件夹,执行以下命令,执行完就ok

for /R %G in (*.c *.cc *.h *.mk) do unix2dos "%G" # *.c *.cc *.h *.mk 表示任意匹配这些后缀名的文件

问题5:编译成功,执行闪退。

解决办法:需要把三方目录下poco和openssl目录下的.dll文件复制到可执行程序下。

image-20240805164125184

其实可以查看缺什么补什么,我直接全部复制过来了。


如果对您有帮助的话,请点个赞哦,有其他问题可以给我留言。(づ ̄3 ̄)づ╭❤~


参考:

[1] C++ SDK 常见问题

[2] QT - QT中配置MSVC编译环境 以及 VS中配置QT开发环境

[3] Qt5.14.2+VS2019配置MSVC2017

[2] QT - QT中配置MSVC编译环境 以及 VS中配置QT开发环境

[3] Qt5.14.2+VS2019配置MSVC2017

[4] 批量转换 LF 和 CRLF 的小技巧【详细步骤】

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

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

相关文章

海外媒体发稿:意大利-展新社/意大利金融报的影响力

一.IT WDPP:世界发展新闻社意大利站 世界发展新闻社(展新社)是全球顶级通讯社之一,其在全球多国设立分社,热门资讯覆盖全球18种主流语言。作为世界发展新闻社的意大利站,IT WDPP以其独特的视角和深度报道&…

工具学习_CONAN_Consuming Packages

1. Build a simple CMake project using Conan 首先创建一个使用最流行的 C 库之一 Zlib 的字符串压缩器应用程序,教程将使用 CMake 构建系统,但需要注意 Conan 适用于任何系统构建方式。 为了完成教程,首先下载对应的项目: git…

大学生助学贷款

大学生助学贷款 文章目录 大学生助学贷款生源地贷款1. 网上申请2. 线下申请 生源地贷款 助学贷款分为生源地贷款和高校助学贷款, 一般情况下都是申请的生源地贷款.第一次贷款, 需要现在网上申请, 申请结束之后, 会有两张表, 贷款申请表和困难认定申请表.注意: 贷款申请表和困难…

pdf转图片要怎么转?6个软件帮助你轻松转换图片格式

pdf转图片要怎么转?6个软件帮助你轻松转换图片格式 将PDF文件转换为图片格式是许多用户的常见需求,尤其是在需要展示、编辑或分享PDF内容时。以下是六款能够帮助你快速、轻松地将PDF转换为图片格式的软件: 迅捷PDF转换器 这是一款非常简单好…

Redis01——Redis简介

目录 NOSQL与SQL的差异 数据结构:结构化 VS 非结构化 数据关联:关系型 VS 非关系型 数据查询:SQL查询 VS 非SQL查询 事务特性:满足事 VS 没有完全满足 Redis 简介 Redis 安装 Redis 数据结构简介 Redis 常用命令&#xff…

论文被Turnitin查出AI率,会受影响吗?

无论是作业或是毕业论文的提交,原创性已成为了硬性标准。因此提交前都会使用Turnitin(www.checktoo.com)进行论文检测,用来确保其原创性。可当Turnitin报告能显示出论文的AI率时,越来越多学者开始担忧“这会对我的论文…

c++单例实践

C单例实践 在日常开发中,虽然太多的单例调用会让代码的耦合度变高,但是例如日志类这种,单例模式就变得非常有。所以这篇文章为大家介绍static 关键字相关知识以及如何实现自己的C单例类。 static关键字 首先让我们请出今天的主角: static。…

Brave浏览器:开启隐私保护新时代

今天电脑天空要向大家介绍一款专注隐私安全的浏览器——BraveBrowser,它不仅仅是一个浏览工具,更是你在线隐私的守护者! BraveBrowser是一款免费且开源的网络浏览器,它的核心优势在于其强大的广告和跟踪器阻止功能。想象一下&…

数据要素流通交易的场景概述

00前言 数据要素作为国家重点发展方向,如何发挥其数据要素价值是目前研究的重点。核心的观点是流动的数据才能产生价值,如果数据并没有开放、共享那么价值一定是有限的。目前,数据流通类型主要包括数据开放、数据共享和数据交易三种。 数据…

【Python学习手册(第四版)】学习笔记16-函数基础

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍Python中函数的基本概念,作用域以及参数传递,函数语法以及def和return语句的操作,函数调用表达式的行为&#xff…

AWS DMS遇到 Error : no handler found for uri

问题描述: 当我按照文档[1]配置AWS DMS 目标端为OpenSearch, 并进行数据迁移的时候,我遇到了如下报错: 00015696: 2024-07-31T03:26:57 [TARGET_LOAD ]E: Elasticsearch:FAILED SourceTable:test TargetIndex:test Operation:INSERT_E…

Mysql80主从复制搭建;遇到问题 Slave_IO_Running: Connecting和Slave_SQL_Running以及解决过程

总结主要步骤 1.配置一个提供复制的账号; 创建用户 CREATE USER replication% IDENTIFIED BY your_password; GRANT REPLICATION SLAVE ON *.* TO replication%; FLUSH PRIVILEGES;2.修改配置 选择模式 主库配置; windows的得话是my.ini文件 默认这个目…

Vue项目学习(1)

1、进入cmd命令行——> vue ui ——>等等操作 2、 3、src目录下 4、vue项目的启动 (1) (2) 5、如何更改前端vue项目的端口号?——>去vue.config.js里配置应一个对象

云端医疗解决方案:互联网医院系统的云计算架构与实现

随着云计算技术的成熟和普及,医疗行业开始探索云端解决方案,以应对数据存储、计算能力和系统扩展性等方面的挑战。互联网医院系统作为医疗信息化的重要组成部分,通过云计算架构实现了高效、灵活和可扩展的医疗服务。本文将深入探讨互联网医院…

【vulnhub】DC-2靶机

信息收集 靶机扫描 nmap 192.168.93.1/24 端口扫描 网页访问 发现访问不到,根据显示考虑IP未遵循重定向到域名 在本机的C:\Windows\System32\drivers\etc 修改hosts⽂件,添加192.168.93.136 dc-2 再次进行访问,可以访问到 点击flag&#x…

牛客JS题(十七)总成绩排名

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 引用传值深拷贝合理封装 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><script type"text/javascript&quo…

ResNet原理

一、ResNet基础架构 残差块 批量归一化层 二、ResNet网络参数详解 三、ResNet总结 残差网络的出现使人们摆脱了深度的束缚&#xff0c;大幅改善了深度神经网络中的模型退化问题&#xff0c;使网络层数从数十层跃升至几百上千层&#xff0c;大幅提高了模型精度&#xff0c;通用…

Linux 下 perf 的使用

目录 一、概述1、perf 作用2、常用的工具集 二、perf 工具的使用1、perf list2、perf stat3、perf top4、perf record/report4.1 perf record4.2 perf report 5、perf annotate 一、概述 1、perf 作用 perf 是一个性能分析工具&#xff08;基于 Linux 内核提供的性能事件 per…

jacodb导入带签名的jar包失败的问题

今天在执行某个项目分析时&#xff0c;100多个jar包只有BC库的三个jar包导入失败。错误如下&#xff1a; [DefaultDispatcher-worker-1 coroutine#1] INFO org.jacodb.impl.storage.PersistenceService - Starting app version [1.4] [DefaultDispatcher-worker-16 coroutine#…

世界上最小,装机量最多的数据库居然是...

最近在根客户沟通数据库选型的时候&#xff0c;聊到了手机应用内置的数据库SQLite。别小看它哈&#xff0c;它可是世界上最小&#xff0c;装机量最多的数据库&#xff0c;只是因为它着实太低调了&#xff0c;低调的连官网都是那么朴素。麻雀虽小&#xff0c;五脏俱全&#xff0…