當前位置:首頁 » 編程軟體 » VS2019查看msvc編譯器版本

VS2019查看msvc編譯器版本

發布時間: 2022-04-24 12:31:36

Ⅰ VS里正常的代碼在QT里執行有問題要怎麼弄好QT的

在安裝 QT+MSVC環境的時候,該出的問題我想都讓我碰上了。

  • 問題1 :jom.exe 崩潰,構建不通過。

    jom: ......... Error 219:19:11: 進程"E:QT1ToolsQtCreatorinjom.exe"退出,退出代碼 2 。Error while building/deploying project untitled (kit: Desktop Qt 5.5.1 MSVC2015 64bit)When executing step "Make"

    這個我沒有出現什麼cl不是內部命令的提示,至於使用nmake就更錯了,nmake運行就出問題,估計是安裝時nmake就有問題了。所以不是環境變數之類的錯誤,由於我前期先安裝的QT+MinGW,後來需要MSVC才安裝的vs2015,估計是這個安裝先後順序導致一些配置不對,反正我的kit配置都沒有錯誤提示了也不行,乾脆直接全卸了重新來。這次OK了,msvc,mingw都能用了。後來看到有初始化msvc編譯環境的腳本,如果不行就先使用下試試,沒准就OK了,不用浪費時間重新安裝(安裝時間好長呀)

  • 1

  • 問題2 -1: error: LNK2019: 無法解析的外部符號 **,該符號在函數 ** 中被引用,看圖說話。

    無法解析的外部符號說明,該函數的庫或頭文件沒有被引入,比如下面

    qmfcapp.obj : error LNK2019: 無法解析的外部符號 __imp_SetWindowsHookExW,該符號在函數 "public: static bool __cdecl QMfcApp::pluginInstance(void *)" (?pluginInstance@QMfcApp@@SA_NPEAX@Z) 中被引用

    在QT中找到QMfcApp::pluginInstance函數查看了下使用到外部函數的地方SetWindowsHookEx,點擊可以跳轉到頭文件WinUser.h,那就是庫沒有了。由於原來是MinGW,內部的庫都導入了,轉到MSVC後一些自帶的系統庫沒有加進來。網路查找SetWindowsHookEx該函數所需庫User32.lib,在電腦上搜了。然後在.pro工程文件中右鍵加入庫如下


    把加後綴的勾刪了,我這window下好像沒有專門的d版調試庫。
    OK。這時在庫里就自動加上了下面這幾行。

    unix|win32: LIBS += -L'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64/' -lUser32INCLUDEPATH += 'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64'DEPENDPATH += 'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64'
  • 1

  • 2

  • 3

  • 4

  • 1

  • 問題3 User32.Lib:-1: warning: LNK4272:庫計算機類型「X86」與目標計算機類型「x64」沖突
    剛開始時找錯了庫,找到的是32位編譯出來的user32.lib庫,後來直接到系統盤window下找到了64位的就OK了。

  • 問題4 This application has requested the Runtime to terminate it in an unusual way

    這個在我安裝了vs2015就出現了這問題,沒裝時都好好的。這個上一篇有講到,這次又遇上了,我真的是無語了,也是莫名其妙的又不報了。具體怎麼弄好的我也摸不著,vs2015又裝了VC++里的所有部分(MFC類,兼容XP什麼的兩個,原本就一個VC++編譯器的),到qt安裝目錄里有個vcredist_msvc2015_x86運行,重啟後也一樣,然後還有什麼,重新拷貝庫?一堆事情,一個個試都不好,換vb,vs,突然之間就好了,可是VB來錯誤53,找不到dll了,vs來載入格式不正常,這個看問題5。但有一點可以肯定—-錯誤與下面的dll無關,這個是depends找不到有關的bug。

  • 問題5 試圖載入格式不正確的程序。 (異常來自 HRESULT:0x8007000B)

    這里是目標平台和庫不一致,需要注意下,用MinGW編譯的去MinGW版的QT庫里找對應的庫(debug版和release版),然後要注意的是它是32位的,所以vs里只能選擇X86平台。貌似沒有找到有64的MinGW版本的QT.
    而MSVC我下的是64的,所以只能選則X64平台。拷貝庫也是到msvc版的QT庫里找。如果庫位數不對,會呈粉紅色。

  • 問題6 其他信息: 無法載入 DLL「bstdll.dll」: 找不到指定的程序。 (異常來自 HRESULT:0x8007007F)。

    換成X86的拿mingw編譯出來的試出這問題,拿到在VB下就是 實時錯誤53:找不到DLL的意思了。這個估計就是跟安裝了vs2015的問題有關了。安裝了vs2015後VC++估計把我一些32位的庫給弄掉了,怎麼都無法成功了。嘗試下個msvc 32位的編譯看是否一樣。

  • 問題7 error: C2373: 「saveImage」: 重定義;不同的類型修飾符
    同樣的代碼用64的編譯器和MinGW都沒問題,換成32位的msvc就出問題了,
    .h文件

    extern "C" BSTDLLAPI void __stdcall saveImage(const char *file);

    .cpp文件

    void saveImage(const char *file){
    dev.savePicture(file);
    }

    平常看到的講解導出dll都沒要求實現里也要加上__stdcall,這里報錯就是這個原因,.cpp里也加個__stdcall就OK了。

  • 1

  • 2

  • 3

  • 1

  • 問題8 其他信息: 無法在 DLL「xxx.dll」中找到名為「xxx」的入口點。

    到這一部至少說明,dll可以被找到,目標平台和生成的dll也是一致的,只是入口函數找不到,可能是導出名不對了,depends查看下果然名字被過度修飾了。變成了_function@bytenum形式。
    怎麼解決我不知道msvc的編譯器有沒有這個選項,直接改成這個名字算了。

  • 問題9 發生了 PInvokeStackImbalance
    對PInvoke函數的調用導致堆棧不對稱。

    先看看是不是調用協議不對,vb是__stdcall,vc++默認用__cdecl,如果一致了還出錯,那可能是long要改成int32,這個嘗試改下就行了。我就是這么解決的。

  • 到此,無論是64還是32位都能用了。坑好多啊。MinGW版不知道為什麼就是錯誤提示找不到dll,裝了個VS2015麻煩這么多。有知道的大神可以解惑下。
    有些人說MinGW版編譯的dll不能在window下用是有問題的,反正我不裝VS2015時一切都好好的。如上篇所述,而且也在別人機子上試過。現在沒時間找這個問題了,能用就行了。

Ⅱ 如何確定VS編譯器版本

如何確定VS編譯器版本

_MSC_VER是MSVC編譯器的內置宏,定義了編譯器的版本,_MSC_VER 值對應版本關系

MSVC++ 11.0 _MSC_VER = 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER = 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER = 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER = 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER = 1310 (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER = 1300 (Visual Studio 2002)
MSVC++ 6.0 _MSC_VER = 1200
MSVC++ 5.0 _MSC_VER = 1100

example:

#if (_MSC_VER == 1300) //vc7
#import "acax16ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1200) //vc6
#import "acad.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1400) //vc8
#import "acax17ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1500) //vc9
#import "acax18ENU.tlb" no_implementation raw_interfaces_only named_guids
#endif

在程序中加入_MSC_VER宏可以根據編譯器版本讓編譯器選擇性地編譯一段程序。例如一個版本編譯器產生的lib文件可能不能被另一個版

本的編譯器調用,那麼在開發應用程序的時候,在該程序的lib調用庫中放入多個版本編譯器產生的lib文件。在程序中加入_MSC_VER宏
,編譯器就能夠在調用的時根據其版本自動選擇可以鏈接的lib庫版本,如下所示。
#if _MSC_VER >= 1400 // for vc8, or vc9
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc8-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc8-r.lib" )
#endif
#else if _MSC_VER >= 1310 // for vc71
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc71-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc71-r.lib" )
#endif
#else if _MSC_VER >=1200 // for vc6
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc6-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc6-r.lib" )
#endif
#endif

Ⅲ 如何查看vs編譯器版本

MSVC++ 11.0 _MSC_VER = 1700 (Visual Studio 2011)
MSVC++ 10.0 _MSC_VER = 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER = 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER = 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER = 1310 (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER = 1300 (Visual Studio 2002)
MSVC++ 6.0 _MSC_VER = 1200
MSVC++ 5.0 _MSC_VER = 1100
example:

#if (_MSC_VER == 1300) //vc7
#import "acax16ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1200) //vc6
#import "acad.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1400) //vc8
#import "acax17ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1500) //vc9
#import "acax18ENU.tlb" no_implementation raw_interfaces_only named_guids
#endif

Ⅳ VS2019能編譯過去但VS2013不行會報錯

如果你寫 c 你就必須繼續,因為 c 標准就是這么寫的。 但是如果你寫 c + + ,你可以寫任何你想要的變數。 不是 vs2010的問題,而是你用的問題。 Vs2010中的 vc + + 2010本身是一個 c + + 編譯器,只是一個 c 語言兼容的編譯器。

Ⅳ vs2022為什麼會在D盤根目錄下生成windows kits文件

你安裝的時候選擇了windows的SKD,就會有這個文件夾,但是目錄是可以修改的

Ⅵ VS2010的工程如何得到msvc文件啊

cl.exe是微軟msvc的編譯器。既然你使用qt5.3.0,那麼你電腦上應該裝有vs2013吧。如果有,那麼cl.exe應該位於你的vs的安裝路徑下的vc\bin子文件夾下。把這個路徑添加到環境變數中,再make試試。

Ⅶ VC++6.0和Dec_C++、VS2019輸出結果不一樣的原因是什麼

一定要記住,同級別的運算符一定要加括弧:

否則運算順序是由編譯器決定。

Ⅷ 如何單獨提取出MSVC2017編譯器並在其他IDE使用

可以參考xmake的實現,xmake裡面就是自動探測系統安裝的vs編譯環境,然後自動進行構建,主要還是通過載入vcvarsall.bat,來導入path, lib, include等環境變數,然後就可以直接調用cl.exe/link.exe等編譯器、鏈接器進行編譯鏈接了。。
對於vcvarsall.bat的探測,vs2017以前的版本,可以通過VSXXXCOMNTOOLS環境變數來發現,例如:VS140COMNTOOLS對應 vs2015。。但是vs2017之後就沒這個環境變數了,因此更加通用可靠的探測方式,是從注冊表中查找,例如,vs2017的注冊表項:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7;15.0)\\VC\\Auxiliary\\Build
vs2017之前版本路徑如下:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7;14.0)\\VC
64bits版本,Microsoft之前再加個Wow6432Node。。

Ⅸ VS2017 支持C11嗎想測試一下泛型選擇_Generic,但是提示未定義,有沒有什麼解決方法

VS2017自帶的msvc編譯器並不支持C11標准,但你可以通過安裝Clang 3.3以上版本並用Clang作為編譯器來支持C11。

網頁鏈接

Ⅹ Visualstudio2012軟體中使用MSVC

1、打開命令搜索,輸入cjson。2、打開配置文件,加入路徑(其中一個是msvc的工具包,還有一個是win10的工具包)。3、安裝插件,這個插件是幫你生成工程。4、安裝完後,新建一個demo文件夾,用vscode打開然後按鍵按下ctrl+shift+p,輸入easy選擇新建工程。5、選擇2019MSVC工具集,然後它會幫你建立工程的文件。6、需要根據你電腦vs安裝的位置,修改build.bat文件,因為在MSVC進行編譯的時候,會需要專用的環境,需要用到vcvarsall.bat腳本來製造環境,它會將使用到cl.exe等工具的環境製造好。
注意:需要修改build.bat文件,修改你對應的路徑,注意框出來的,需要和前面的vcvarsall.bat有空格,不然會報錯。
編譯調試建議將launch.json文件中的console修改一下,方便調試。然後運行調試即可,用MSVC的重點就在與build.bat腳本的編寫,完全可以自己手動建立工程,但是既然有這個插件,省去了一些步驟,還是可以的。

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:525
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:24
linux485 發布:2025-07-05 14:38:28 瀏覽:304
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:754
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:431
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:698
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:240
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:685
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:282
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:834