首先,我要说的是,所有内容都可以与在线安装程序中的标准Qt库一起编译,链接和正常运行
让我们开始
我希望我的应用程序独立运行(仅exe文件)。我已经下载并设置了tesseract,leptonica和相关库。只有Qt保持动态。然后,我阅读了许多说明,以了解如何使其静态化。我从page到处都下载了qt。使用以下命令进行编译:configure -static -release -platform win32-msvcnmakenmake install
然后我用编译后的静态库用新的Qt / 5.13路径替换了Qt / 5.13 / msvc路径
这是我的cmake文件(我在Clion cuz中编码,我讨厌Visual Studio IntelliSens的选项卡自动补全,而不是回车)
#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")