我有一个简单的Qt-5控制台应用程序,我正在Visual 2015中开发。我可以使用Qt对象,如QStrings,因此我确信Qt安装正确,但我需要将QString转换为char*,以便将其传递给库函数。
我跟随了这个答案: conversion
所以我现在有了如下代码:
QString myStr = "SomeString";
QByteArray ba = myStr.toLatin1();
const char *c_str = ba.data();
但是,当我构建解决方案时,我会得到以下错误:
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方法而没有问题。
发布于 2016-10-25 16:25:48
链接器错误显示“损坏”的C++符号名,它包含编码的类和参数。C++符号名的损坏没有标准,所以不同的编译器会采取不同的做法。即使是不同版本的“相同”编译器也可能会改变这一点(除其他外,没有标准的C++ ABI),微软在VisualC++上已经做了好几次了。
因此,您使用的任何C++库都必须使用相同的C++编译器工具链(或兼容的编译器)进行编译,但是在Windows上有很多.不幸的多样性,这里)。
这也适用于Qt。这就是为什么要为Windows找到几次Qt脱机安装程序的下载,以及为什么在线安装程序显示了许多不同的Qt版本,它们的版本号相同,但工具链名称不同。如果您为您想要使用的编译器找到预构建的Qt,很好!安装好它就会高兴起来。
如果没有,你有两个选择:
发布于 2016-10-25 16:22:22
正如hyde所建议的,这实际上是我正在使用的Qt库与我的Visual版本之间的不匹配。对于VS2015,我必须访问Qt网站上的所有下载页面,并具体使用QT5.7.0forWindows (VS 2015)。
更新我在项目设置中使用的Qt版本,可以消除链接器错误。
https://stackoverflow.com/questions/40243023
复制相似问题