赞
踩
undefined reference to qcloud_cos
前情提要:因为需要在qt中开发云存储项目,所以使用了腾讯云SDK,没想到问题百出,记录一下过程中遇到的问题。
我的环境是:
window11
cmake version 3.29.3
Visual Studio2022
QMake version 3.1
qt 5.12.10
如果有帮到您的话,请点个赞哦~
LNK1104 无法打开文件“PocoFoundationd.lib”
release
构建/运行。Tips: 如果需要debug的话,请按照官方文档重新配置:Windows Debug 版本编译指南 。这个我目前还没试过,估计也是很坑
fatal error: cos_api.h: No such file or directory
解决办法:
cossdk.lib
放到libs目录下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/…”)也可以用同样的方式导入头文件和库
undefined reference to qcloud_cos...
真正的重头戏来了,遇到这个问题的同学请注意!
请看官方文档:C++ SDK 常见问题
官方文档上说:这种情况一般是因为工程自带的 libcossdk.a 编译使用的 gcc 版本与客户机器上的 gcc 版本不一致导致的,需要客户重新编译 poco 库和 libcossdk。
实际上我并没有按照他给出的方法解决问题,我从openssl开始编译,然后编译poco文件,然后编译cossdk,最后放到qt上依然会报错。
因为大家不一定和我的问题是同一个问题,所以我会在本节记录一下我编译过程中遇到的问题,给选择编译路线的小伙伴一些提示。在之后我会给出我真正解决问题的方法。
PocoCrypto.lib、PocoNetSSL.lib
网络上编译Poco的教程很多,不作详细介绍,简单步骤为:
在这个过程中可能会遇到没有生成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
undefined reference to qcloud_cos...
问题定位:
可以尝试切换 MSVC2017 64bit这个方式
问题继续:
根因:VS编译版本不匹配
解决步骤:
1、没有VS需要下载对应版本的VS,用VS但是没有该版本的话,下载插件
2、记下两个目录
C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat
D:\Windows Kits\10\Debuggers\x64\cdb.exe
3、一切准备就绪,最好重启一下
3、打开QT Creator进行配置
添加 -> MVSC
,按照我的配置和你的目录进行配置这样应该可以构建成功了,如果还有问题的话,通常是库文件的换行符问题,可以查看后续的问题4。
如果是执行闪退请跳转到问题5。
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 表示任意匹配这些后缀名的文件
解决办法:需要把三方目录下poco和openssl目录下的.dll文件复制到可执行程序下。
其实可以查看缺什么补什么,我直接全部复制过来了。
如果对您有帮助的话,请点个赞哦,有其他问题可以给我留言。(づ ̄3 ̄)づ╭❤~
参考:
[1] C++ SDK 常见问题
[2] QT - QT中配置MSVC编译环境 以及 VS中配置QT开发环境
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。