日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

VS2013+qt-vs-addin-1.2.4安装配置

發(fā)布時(shí)間:2024/6/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2013+qt-vs-addin-1.2.4安装配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

--------------------------開(kāi)頭這部分可以跳過(guò),僅作為筆記-----------------------

我問(wèn)過(guò)的問(wèn)題:

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

另一個(gè)論壇我問(wèn)的問(wèn)題:

Q:
用Qt的QString應(yīng)該鏈接到哪個(gè)lib?
現(xiàn)在需要用Qt的QString, IDE用的VS.
翻了半天文檔也沒(méi)發(fā)現(xiàn)該鏈接到哪個(gè)lib啊, 總沒(méi)必要把100多個(gè)lib全給加到項(xiàng)目依賴(lài)?yán)锩嫒グ?..

A:
看那個(gè)提示應(yīng)該不是lib找不到吧?lib找不到的話(huà)會(huì)直接抱錯(cuò)無(wú)法找到.lib的吧

A:
你確定報(bào)LNK2019的函數(shù)都在Qt5Cored.lib中?

Q:
請(qǐng)教一個(gè)問(wèn)題
如果VS報(bào)錯(cuò)LNK2019的符號(hào)是: "__declspec(dllimport) public: __thiscall QString::QString(void)" (__imp_??0QString@@QAE@XZ)
我用 dumpbin /exports /out:qt5cored.exports qt5cored.lib 查看了一下導(dǎo)出的符號(hào), 相關(guān)的符號(hào)是
??0QString@@QEAA@XZ (public: __cdecl QString::QString(void))
__cdecl 和 __thiscall 的區(qū)別是不是導(dǎo)致LNK2019的原因????

A:
調(diào)用約定不同,符號(hào)名也不同。
靜態(tài)鏈接和動(dòng)態(tài)鏈接,符號(hào)名也不同。
動(dòng)態(tài)鏈接時(shí)沒(méi)寫(xiě) __declspec(dllimport),一般情況下沒(méi)事。應(yīng)該靜態(tài)鏈接但是寫(xiě)了 __declspec(dllimport),那就不行了。

Q:
dllimport 肯定是 Qt頭文件自己加上去的 莫非是因?yàn)槲覜](méi)有定義相關(guān)的宏所以沒(méi)有正確地告訴Qt我要靜態(tài)鏈接, 再找找

?

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

?

VS安裝略過(guò).

?

去Qt官網(wǎng)下載在線安裝包, 我下載的是qt-unified-windows-x86-2.0.2-2-online.exe

這貨會(huì)檢測(cè)你系統(tǒng)上的編譯器并下載對(duì)應(yīng)的lib文件, 我的是 MSVC 12.0

?

打開(kāi)后我一路默認(rèn)安裝到D:\Qt

(它默認(rèn)居然既勾選了5.4也勾選了5.5)

?

安裝完成后目錄結(jié)構(gòu)如下:

?

?

最開(kāi)始我嘗試不安裝qt-vs-addin就直接用VS導(dǎo)入Qt的lib文件用, 簡(jiǎn)單用QString和QDir寫(xiě)了個(gè)測(cè)試(創(chuàng)建+刪除文件夾, 代碼很簡(jiǎn)單, 就幾行, 略), 結(jié)果報(bào)錯(cuò), 如下圖

?

注意我這里用的是Qt5.5的lib和頭文件.

?

結(jié)果我在壇子上問(wèn)了幾個(gè)問(wèn)題, 別人叫我打開(kāi)linker的/VERBOSE選項(xiàng)看看到底問(wèn)題出在哪里

?

一看, Qt5Cored.lib和qtmaind.lib都標(biāo)記為"未使用"

?

我就奇怪了, 就仔細(xì)看LNK2019的信息, 隨便找了一個(gè)

1>main.obj : error LNK2019: 無(wú)法解析的外部符號(hào) "__declspec(dllimport) public: __thiscall QString::QString(void)" (__imp_??0QString@@QAE@XZ),該符號(hào)在函數(shù) _main 中被引用

?

好的, 我就dumpbin /exports /out:qt5cored.exports qt5cored.lib 查看了一下導(dǎo)出的符號(hào), 相關(guān)的符號(hào)是
??0QString@@QEAA@XZ (public: __cdecl QString::QString(void))
首先, lib中的是 __cdecl, MSVC要查找的是 __thiscall , 調(diào)用約定不同.

另外, 符號(hào)也不同, 注意一個(gè)是???0QString@@QAE@XZ, 而 lib中的是???0QString@@QEAA@XZ

還有就是 MSVC 查找的是?__declspec(dllimport) 也就是說(shuō)定義在DLL中的函數(shù), 但是我在項(xiàng)目配置中只配置了lib文件(而且不是dll的import lib)

?

我就想?dllimport 肯定是 Qt頭文件自己加上去的 莫非是因?yàn)槲覜](méi)有定義相關(guān)的宏所以沒(méi)有正確地告訴Qt我要靜態(tài)鏈接, 于是我就用VS查看QString的定義, 找到了一個(gè)Q_CORE_EXPORT宏, 再查看定義, 它由QT_SHARED和QT_STATIC控制, 然后我就再找不到相關(guān)的線索了, 可能在別的頭文件里. 我就嘗試定義QT_STATIC, 結(jié)果還是報(bào)LNK2019. 沒(méi)卵用.

?

我在VS里的配置肯定少了什么, 光導(dǎo)入lib可能是不夠的. 比如說(shuō)相關(guān)的宏定義, 這樣才能正確地編譯鏈接Qt的代碼(畢竟編譯器, 系統(tǒng), 版本, 鏈接方式什么的都需要通過(guò)宏定義說(shuō)清楚.)

?

實(shí)在沒(méi)轍, 我就下載了qt-vs-addin, 我下載的是:qt-vs-addin-1.2.4-opensource.exe

?

關(guān)掉VS. 一路默認(rèn)安裝. 安裝好之后 VS 工具欄上出現(xiàn)了 Qt5 的按鈕. 可以新建 Qt5 的工程了.

?

新建了一個(gè). 看addin是怎么配置的.

?

1. Qt5->Qt Options->版本, 我先選的5.5. 其他東西都默認(rèn).

?

2. 查看VC項(xiàng)目配置, 首先是目錄配置, Qt Addin沒(méi)有選擇全局配置, 而是在編譯器和鏈接器選項(xiàng)中單獨(dú)配置頭文件, 庫(kù)文件路徑

?

3. 注意 Addin 添加了幾個(gè)宏定義, 這個(gè)是成功編譯鏈接的關(guān)鍵

我猜定義UNICODE, WIN32, WIN64是Qt在Windows平臺(tái)上匹配MSVC必須的宏, 畢竟QString是UNICODE的, 其他也得按MSVC的規(guī)則編譯.

另外, QT_DLL應(yīng)該是指定了Qt庫(kù)不是靜態(tài)鏈接而是動(dòng)態(tài)鏈接.

QT_CORE_LIB也指定了要用的庫(kù)是Qt5Core.

?

4. 如果以前構(gòu)建過(guò)項(xiàng)目, 一定要清理, 清理!!!!! 然后重新構(gòu)建. 就可以了.

?

從上面可以看出, 為了讓Qt在VS中能成功生成二進(jìn)制代碼. 你手動(dòng)去添加路徑, 宏, 很麻煩的, 比如你如果不止用了QtCore呢? 還要定義哪些宏? 這個(gè)只有QtAddin知道了. 你可以試試右擊Qt項(xiàng)目->Qt Project Settings->Qt Modules->添加X(jué)ml, 然后你再去看看VS項(xiàng)目屬性中發(fā)生了哪些變化. 很多的, 你手動(dòng)弄很容易出錯(cuò). 交給QtAddin解決吧.

?

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

?

可以看出上面的很多路徑配置依賴(lài)于$(QTDIR)的定義, $(QTDIR)舉個(gè)例子其實(shí)就是我們上面說(shuō)到的D:\Qt\5.5\msvc2013_64

有時(shí)候你發(fā)現(xiàn)找不到Qt的頭文件, 或者linker報(bào)錯(cuò)LNK2019等等, 你就應(yīng)該打開(kāi)VC項(xiàng)目屬性, 查看編譯器的命令行, 看QTDIR有沒(méi)有正確定義.

或者查看鏈接器的命令行(或者打開(kāi)/VERBOSE)看QTDIR有沒(méi)有正確定義. 如果沒(méi)有, 按照下述步驟重新定義QTDIR:

1.

每次修改$(QTDIR)應(yīng)該首先關(guān)閉所有的Qt項(xiàng)目, 重新打開(kāi)Qt項(xiàng)目才會(huì)生效

2.

然后點(diǎn)Qt5->Qt Options->Delete所有已添加項(xiàng)->Add->選擇比如我們上面說(shuō)到的D:\Qt\5.5\msvc2013_64, 命名為Qt5.5->確定->Default Qt/Win version選擇剛剛設(shè)置的Qt5.5->點(diǎn)OK

3.

重新打開(kāi)Qt項(xiàng)目, 就生效了

?

還有另一種情況你發(fā)現(xiàn)linker報(bào)LNK2019, 你選擇項(xiàng)目->項(xiàng)目屬性->配置屬性->常規(guī)->平臺(tái)->注意看是Win32還是x64, 這個(gè)一定要跟Qt的匹配!

我就是因?yàn)閂C項(xiàng)目是Win32但Qt是X64的一直報(bào)LNK2019錯(cuò)誤.

選擇"配置管理器", 把"平臺(tái)"修改為"X64"即可.

轉(zhuǎn)載于:https://www.cnblogs.com/qrlozte/p/4953205.html

總結(jié)

以上是生活随笔為你收集整理的VS2013+qt-vs-addin-1.2.4安装配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。