--------------------------开头这部分可以跳过,仅作为笔记-----------------------

我问过的问题:

http://www.codeproject.com/Questions/1052584/Visual-Studio-compiling-Qt-code-report-LNK

http://www.qtcentre.org/threads/64257-Visual-Studio-compiling-Qt-code-report-LNK2019

另一个论坛我问的问题:

Q:
用Qt的QString应该链接到哪个lib?
现在需要用Qt的QString, IDE用的VS.
翻了半天文档也没发现该链接到哪个lib啊, 总没必要把100多个lib全给加到项目依赖里面去吧...

A:
看那个提示应该不是lib找不到吧?lib找不到的话会直接抱错无法找到.lib的吧

A:
你确定报LNK2019的函数都在Qt5Cored.lib中?

Q:
请教一个问题
如果VS报错LNK2019的符号是: "__declspec(dllimport) public: __thiscall QString::QString(void)" (__imp_??0QString@@QAE@XZ)
我用 dumpbin /exports /out:qt5cored.exports qt5cored.lib 查看了一下导出的符号, 相关的符号是
??0QString@@QEAA@XZ (public: __cdecl QString::QString(void))
__cdecl 和 __thiscall 的区别是不是导致LNK2019的原因????

A:
调用约定不同,符号名也不同。
静态链接和动态链接,符号名也不同。
动态链接时没写 __declspec(dllimport),一般情况下没事。应该静态链接但是写了 __declspec(dllimport),那就不行了。

Q:
dllimport 肯定是 Qt头文件自己加上去的 莫非是因为我没有定义相关的宏所以没有正确地告诉Qt我要静态链接, 再找找

-----------------------------------------------------------------------------------

VS安装略过.

去Qt官网下载在线安装包, 我下载的是qt-unified-windows-x86-2.0.2-2-online.exe

这货会检测你系统上的编译器并下载对应的lib文件, 我的是 MSVC 12.0

打开后我一路默认安装到D:\Qt

(它默认居然既勾选了5.4也勾选了5.5)

安装完成后目录结构如下:

最开始我尝试不安装qt-vs-addin就直接用VS导入Qt的lib文件用, 简单用QString和QDir写了个测试(创建+删除文件夹, 代码很简单, 就几行, 略), 结果报错, 如下图

注意我这里用的是Qt5.5的lib和头文件.

结果我在坛子上问了几个问题, 别人叫我打开linker的/VERBOSE选项看看到底问题出在哪里

一看, Qt5Cored.lib和qtmaind.lib都标记为"未使用"

我就奇怪了, 就仔细看LNK2019的信息, 随便找了一个

1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::QString(void)" (__imp_??0QString@@QAE@XZ),该符号在函数 _main 中被引用

好的, 我就dumpbin /exports /out:qt5cored.exports qt5cored.lib 查看了一下导出的符号, 相关的符号是
??0QString@@QEAA@XZ (public: __cdecl QString::QString(void))
首先, lib中的是 __cdecl, MSVC要查找的是 __thiscall , 调用约定不同.

另外, 符号也不同, 注意一个是 ??0QString@@QAE@XZ, 而 lib中的是 ??0QString@@QEAA@XZ

还有就是 MSVC 查找的是 __declspec(dllimport) 也就是说定义在DLL中的函数, 但是我在项目配置中只配置了lib文件(而且不是dll的import lib)

我就想 dllimport 肯定是 Qt头文件自己加上去的 莫非是因为我没有定义相关的宏所以没有正确地告诉Qt我要静态链接, 于是我就用VS查看QString的定义, 找到了一个Q_CORE_EXPORT宏, 再查看定义, 它由QT_SHARED和QT_STATIC控制, 然后我就再找不到相关的线索了, 可能在别的头文件里. 我就尝试定义QT_STATIC, 结果还是报LNK2019. 没卵用.

我在VS里的配置肯定少了什么, 光导入lib可能是不够的. 比如说相关的宏定义, 这样才能正确地编译链接Qt的代码(毕竟编译器, 系统, 版本, 链接方式什么的都需要通过宏定义说清楚.)

实在没辙, 我就下载了qt-vs-addin, 我下载的是:qt-vs-addin-1.2.4-opensource.exe

关掉VS. 一路默认安装. 安装好之后 VS 工具栏上出现了 Qt5 的按钮. 可以新建 Qt5 的工程了.

新建了一个. 看addin是怎么配置的.

1. Qt5->Qt Options->版本, 我先选的5.5. 其他东西都默认.

2. 查看VC项目配置, 首先是目录配置, Qt Addin没有选择全局配置, 而是在编译器和链接器选项中单独配置头文件, 库文件路径

3. 注意 Addin 添加了几个宏定义, 这个是成功编译链接的关键

我猜定义UNICODE, WIN32, WIN64是Qt在Windows平台上匹配MSVC必须的宏, 毕竟QString是UNICODE的, 其他也得按MSVC的规则编译.

另外, QT_DLL应该是指定了Qt库不是静态链接而是动态链接.

QT_CORE_LIB也指定了要用的库是Qt5Core.

4. 如果以前构建过项目, 一定要清理, 清理!!!!! 然后重新构建. 就可以了.

从上面可以看出, 为了让Qt在VS中能成功生成二进制代码. 你手动去添加路径, 宏, 很麻烦的, 比如你如果不止用了QtCore呢? 还要定义哪些宏? 这个只有QtAddin知道了. 你可以试试右击Qt项目->Qt Project Settings->Qt Modules->添加Xml, 然后你再去看看VS项目属性中发生了哪些变化. 很多的, 你手动弄很容易出错. 交给QtAddin解决吧.

----------------------------------------

可以看出上面的很多路径配置依赖于$(QTDIR)的定义, $(QTDIR)举个例子其实就是我们上面说到的D:\Qt\5.5\msvc2013_64

有时候你发现找不到Qt的头文件, 或者linker报错LNK2019等等, 你就应该打开VC项目属性, 查看编译器的命令行, 看QTDIR有没有正确定义.

或者查看链接器的命令行(或者打开/VERBOSE)看QTDIR有没有正确定义. 如果没有, 按照下述步骤重新定义QTDIR:

1.

每次修改$(QTDIR)应该首先关闭所有的Qt项目, 重新打开Qt项目才会生效

2.

然后点Qt5->Qt Options->Delete所有已添加项->Add->选择比如我们上面说到的D:\Qt\5.5\msvc2013_64, 命名为Qt5.5->确定->Default Qt/Win version选择刚刚设置的Qt5.5->点OK

3.

重新打开Qt项目, 就生效了

还有另一种情况你发现linker报LNK2019, 你选择项目->项目属性->配置属性->常规->平台->注意看是Win32还是x64, 这个一定要跟Qt的匹配!

我就是因为VC项目是Win32但Qt是X64的一直报LNK2019错误.

选择"配置管理器", 把"平台"修改为"X64"即可.

VS2013+qt-vs-addin-1.2.4安装配置的更多相关文章

  1. Qt+VC2010+glew环境安装配置

    Qt的源码及预编译安装包在 Qt Archive下载,http://download.qt.io/archive/qt/, 目前最新的是Qt5,其中和Qt4不同的是,Qt5多了个QOpenGLWidg ...

  2. qt超强绘图控件qwt - 安装及配置

    qwt是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式 ...

  3. Ubuntu安装配置Qt环境

    安装 QT4.8.6库+QT Creator 2.4.1 下载地址发布 QT4.8.6库  http://mirrors.hustunique.com/qt/official_releases/qt/ ...

  4. VS2013中安装配置和使用Boost库

    源地址:http://www.itnose.net/detail/6077953.html 时间:2014.07.24 地点:基地 ---------------------------------- ...

  5. [转]QT4.8.5+qt-vs-addin-1.1.11+VS2010安装配置和QT工程的新建和加载

    1.下载windows下的QT库 QT4.8.5 for vs2010: http://download.qt-project.org/official_releases/qt/4.8/4.8.5/q ...

  6. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

  7. Qt开发的程序在没有安装Qt环境的机器上可能出现的一些问题

    Qt开发的程序在没有安装Qt环境的机器上可能出现的一些问题,如:除png外的其它类型的图片,如:jpg.ico.bmp等,还有中文乱码等问题,出现这些问题的本质是Qt对这类文件格式或编码格式的支持方式 ...

  8. QT开发环境安装配置教程

    QT开发环境安装配置教程 分类: QT2012-11-29 23:31 35366人阅读 评论(12) 收藏 举报 Linux版的直接在ubutnu软件中心输入QT,安装响应的Designer,Cre ...

  9. PyCharm+Qt Designer+PyUIC安装配置教程

    Qt Designer用于像VC++的MFC一样拖放.设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们 ...

  10. 【资料收集】QT 环境安装配置

    (很详细,极力推荐) [OpenCV] -- win7下配置OpenCV的Qt开发环境 - 代码人生 - 博客频道 - CSDN.NET  http://blog.csdn.net/qiurisuix ...

随机推荐

  1. Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码

    欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...

  2. Ubuntu 14.04 安装 VirtualBox

    参考: ubuntu14.04,安装VirtualBox 5.0(虚拟机软件)! 由于Vagrant工具的需要,安装了一下VirtualBox. 使用参考链接的法一居然在软件中心里面报错,我想可能是没 ...

  3. Redis 笔记与总结6 Redis 高级应用之 事务处理、持久化操作、pub_sub、虚拟内存

    3.事务处理 redis 对事务的支持目前还比较简单. redis 只能保证一个 client 发起的事务中的命令可以连续的执行,而中间不会插入其他 client 的命令. 由于 redis 是单线 ...

  4. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  5. cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp

    下载: <?php $curlobj = curl_init(); curl_setopt($curlobj, CURLOPT_URL, "ftp://192.***.*.***/文件 ...

  6. bash shell命令行选项与修传入参数处理

    在编写shell程序时经常需要处理命令行参数,本文描述在bash下的命令行处理方式.选项与参数:如下命令行: ./test.sh -f config.conf -v --prefix=/home -f ...

  7. wordpress插入腾讯视频的方法

    wordpress插入腾讯视频的方法 最近网站需要插入腾讯视频,但是腾讯视频目前没有分享代码,只有分享到微信,qq,微博等具体选项.百度这个问题,貌似没有很好地解决办法,好像有两个插件可以使用,安装试 ...

  8. RSA

    https://en.wikipedia.org/wiki/RSA_(cryptosystem)

  9. cookie 操作

    //创建并赋值 重新赋值也是这样操作 document.cookie="userId=828"; document.cookie="userName=hulk" ...

  10. C#编程总结(四)多线程应用(进度条的编程问题)——转自http://www.cnblogs.com/yank/p/3232955.html

    多线程应用 多线程应用很广泛,简单总结了一下: 1)不阻断主线程,实现即时响应,由后台线程完成特定操作2)多个线程,完成同类任务,提高并发性能3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提 ...