簡體   English   中英

靜態Qt鏈接問題(MSVC2017)

[英]Problem with static Qt linking (MSVC2017)

首先,我要說的是,所有內容都可以與在線安裝程序中的標准Qt庫一起編譯,鏈接和正常運行

讓我們開始,我希望我的應用程序獨立運行(僅exe文件)。 我已經下載並設置了tesseract,leptonica和相關庫。 只有Qt保持動態。 然后,我閱讀了很多說明,以了解如何使其靜態化。 我從此頁面到處都下載了qt。 使用以下命令進行編譯: configure -static -release -platform win32-msvc nmake nmake install

然后我用編譯后的靜態庫用新的Qt / 5.13路徑替換了Qt / 5.13 / msvc路徑

這是我的cmake文件(我在Clion cuz中編碼,我討厭Visual Studio IntelliSens帶有選項卡的自動完成功能,而不是enter鍵)

#set(CMAKE_VERBOSE_MAKEFILE ON)
cmake_minimum_required(VERSION 3.14)
project(OWStreamRecordEx)
set(CMAKE_CXX_STANDARD 17)

set(CMAKE_PREFIX_PATH ${VCPKG}/installed/x64-windows-static;${QT}/lib/cmake)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Tesseract REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)

include_directories(${VCPKG}/installed/x64-windows-static/include)
include_directories(${QT}/include)

set(CompilerFlags
        CMAKE_CXX_FLAGS
        CMAKE_CXX_FLAGS_DEBUG
        CMAKE_CXX_FLAGS_RELEASE
        CMAKE_C_FLAGS
        CMAKE_C_FLAGS_DEBUG
        CMAKE_C_FLAGS_RELEASE
        )
foreach(CompilerFlag ${CompilerFlags})
    string(REPLACE "/MDd" "/MTd" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
add_executable(OWStreamRecordEx src/main.cpp src/mainwindow.cpp src/mainwindow.h src/mainwindow.ui src/ScreenShooter.cpp src/ScreenShooter.h src/SHMEMReader.cpp src/SHMEMReader.h src/VisionThread.cpp src/VisionThread.h)

target_link_libraries(OWStreamRecordEx Qt5::Core)
target_link_libraries(OWStreamRecordEx Qt5::Gui)
target_link_libraries(OWStreamRecordEx Qt5::Widgets)
target_link_libraries(OWStreamRecordEx libtesseract)

QT和VCPKG由cmake參數-DVCPKG = ...定義

最后我的問題是它沒有鏈接:

LINK : fatal error LNK1104: cannot open file 'C:\Program.obj'

而且,我必須澄清,一切都與常規qt兼容

UPD1:鏈接日志

LINK Pass 1: command "C:\PROGRA~2\MICROS~1\2017\COMMUN~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\OWStreamRecordEx.dir\objects1.rsp /out:OWStreamRecordEx.exe /implib:OWStreamRecordEx.lib /pdb:D:\Evgeny\Documents\DEV\ProjectsQt\OWStreamRecordEx\cmake-build-debug\OWStreamRecordEx.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\mpr.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\netapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\userenv.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\version.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ws2_32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\kernel32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\user32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\shell32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\uuid.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ole32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\advapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winmm.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\mpr.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\netapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\userenv.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\version.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ws2_32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\kernel32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\user32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\shell32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\uuid.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ole32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\advapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winmm.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\mpr.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\netapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\userenv.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\version.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ws2_32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\kernel32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\user32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\shell32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\uuid.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ole32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\advapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winmm.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib uuid.lib user32.lib advapi32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib uuid.lib user32.lib advapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\mpr.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\netapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\userenv.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\version.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ws2_32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\kernel32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\user32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\shell32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\uuid.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\ole32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\advapi32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winmm.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\shell32.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\uxtheme.lib C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\dwmapi.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib uuid.lib user32.lib advapi32.lib D:\Qts\Qt-5.13.0\lib\Qt5Core.lib D:\Qts\Qt-5.13.0\lib\Qt5Gui.lib D:\Qts\Qt-5.13.0\lib\Qt5Widgets.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\tesseract41d.lib D:\Qts\Qt-5.13.0\lib\Qt5Gui.lib D:\Qts\Qt-5.13.0\lib\Qt5Core.lib D:\Qts\Qt-5.13.0\lib\Qt5Gui.lib D:\Qts\Qt-5.13.0\lib\qtlibpng.lib D:\Qts\Qt-5.13.0\lib\Qt5Core.lib D:\Qts\Qt-5.13.0\lib\qtpcre2.lib D:\Qts\Qt-5.13.0\lib\qtharfbuzz.lib Ws2_32.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\leptonica-1.76.0d.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\gif.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\jpegd.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\libpng16d.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\tiffd.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\lzmad.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\jpegd.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\libpng16d.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\tiffd.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\lzmad.lib D:\Evgeny\Documents\DEV\vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\OWStreamRecordEx.dir/intermediate.manifest CMakeFiles\OWStreamRecordEx.dir/manifest.res" failed (exit code 1104) with the following output:

UPD2:

我用“”手動替換了所有程序文件,並且此錯誤消失了,但是在鏈接Qt5Core時出現了新錯誤,它說

Qt5Core.lib(qarraydata.obj) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

如果我使用x64 msvc在x64機器上編譯Qt,那怎么可能?

UPD3:

好的,我將嘗試使用x64參數再次重建qt。 這將花費很長時間(例如8個小時)。 希望對你有幫助

嘗試,而不是

set(CMAKE_PREFIX_PATH ${QT}/lib/cmake)

list(APPEND CMAKE_PREFIX_PATH "${QT}/lib/cmake")

,甚至

list(APPEND CMAKE_PREFIX_PATH "${QT}\\\\lib\\\\cmake")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM