首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用QString ()将QByteArray转换为toLatin1()会产生链接器错误

使用QString ()将QByteArray转换为toLatin1()会产生链接器错误
EN

Stack Overflow用户
提问于 2016-10-25 14:45:58
回答 2查看 1.3K关注 0票数 2

我有一个简单的Qt-5控制台应用程序,我正在Visual 2015中开发。我可以使用Qt对象,如QStrings,因此我确信Qt安装正确,但我需要将QString转换为char*,以便将其传递给库函数。

我跟随了这个答案: conversion

所以我现在有了如下代码:

代码语言:javascript
运行
复制
QString myStr = "SomeString";
QByteArray ba = myStr.toLatin1();
const char *c_str = ba.data();

但是,当我构建解决方案时,我会得到以下错误:

代码语言:javascript
运行
复制
Error   LNK2019 unresolved external symbol "__declspec(dllimport) public: class QByteArray __thiscall QString::toLatin1(void)const & " (__imp_?toLatin1@QString@@QGBE?AVQByteArray@@XZ) referenced in function _main    

问题似乎是toLatin1()调用,但我不知道为什么链接器找不到它,特别是因为我可以使用其他QString方法而没有问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-25 16:25:48

链接器错误显示“损坏”的C++符号名,它包含编码的类和参数。C++符号名的损坏没有标准,所以不同的编译器会采取不同的做法。即使是不同版本的“相同”编译器也可能会改变这一点(除其他外,没有标准的C++ ABI),微软在VisualC++上已经做了好几次了。

因此,您使用的任何C++库都必须使用相同的C++编译器工具链(或兼容的编译器)进行编译,但是在Windows上有很多.不幸的多样性,这里)。

这也适用于Qt。这就是为什么要为Windows找到几次Qt脱机安装程序的下载,以及为什么在线安装程序显示了许多不同的Qt版本,它们的版本号相同,但工具链名称不同。如果您为您想要使用的编译器找到预构建的Qt,很好!安装好它就会高兴起来。

如果没有,你有两个选择:

  • 使用您选择的编译器构建Qt库。这并不难,指令是好的,但是在Windows上它可能有点乏味,因为有一些先决条件,比如Python,您需要单独获得这些先决条件。
  • 切换编译器工具链,以便为其获得一个预先构建的Qt库(Qt安装程序可以安装与其用于MinGW的Qt工具链相匹配的Qt工具链,如果您没有使用其他工具的要求,这相当方便)。
票数 2
EN

Stack Overflow用户

发布于 2016-10-25 16:22:22

正如hyde所建议的,这实际上是我正在使用的Qt库与我的Visual版本之间的不匹配。对于VS2015,我必须访问Qt网站上的所有下载页面,并具体使用QT5.7.0forWindows (VS 2015)。

更新我在项目设置中使用的Qt版本,可以消除链接器错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40243023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档