2017-11-11 105 views
0

我正在使用Visual Studio cl.exe編譯器在Windows 10上使用Qt 5.9編譯程序。該程序是跨平臺的,Mac版(用鐺建造)構建得很好。Qt命令行編譯在鏈接器階段使用垃圾NXCOMPAT數據失敗

的指令是:

產生商務部和.o文件
qmake.exe Project-Test.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug" && jom.exe 

後,鏈接器開始:

link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:release\Project-Test.exe @C:\Users\User\AppData\Local\Temp\Project-Test.exe.7920.282.jom 

然後立刻失敗:

link: extra operand ÔÇÿ/NXCOMPATÔÇÖ 
Try 'link --help' for more information. 
jom: C:\Users\User\ProjectName\Project-AppAndTest\Project-Test\Makefile.Release [release\Project-Test.exe] Error 1 

我嘗試過qmake和jom的各種組合,但沒有明顯的區別。我的感覺是,有一些環境變量缺失或不正確。
NXCOMPAT似乎與軟件是否可在PC上運行有關。我確實有一些依賴於平臺的代碼段(如果PC做x,如果Mac做y),但是當它編譯並鏈接上面完全相同的命令時,我認爲這不是原因。

我已經在兩臺不同的計算機上測試了這個部署,並且發生了相同的錯誤。

一些澄清關於會的答案,

該方案建立和從GUI運行良好,但該計劃應該建立和作爲批處理文件的一部分執行,不能涉及的GUI任何方式。

我使用庫QWebEngine,目前無法與MinGW編譯,所以我堅持使用Visual Studio/Cl。

該平臺是64位的,但該程序包含32位庫,因此必須使用win32-msvc標誌進行編譯。

我已經嘗試使用vcvarsall.bat來運行軟件,但是這似乎是打破了Qt包含路徑設置,並且程序將不會編譯而不修改所有#includes以明確指出標頭所在的位置。

我希望得到一些有關可能導致此錯誤的信息以及如何解決此問題。

回答

0

問題是由於mingw鏈接器被靜靜地添加到bash路徑中引起的。

我一直在git bash下建立軟件,似乎在minGW鏈接器前面加上了路徑;所以當鏈接命令被調用時,它使用的是GNU鏈接器而不是MSVC鏈接器。

我能夠通過在執行構建之前導出預期路徑來解決此問題。