使用 CMake 的 Qt 应用程序中的静态链接库

问题描述 投票:0回答:2

我正在尝试使用 CMake 构建带有静态库的 Qt5 应用程序,但我不知道如何静态链接文件。我已经被困在这个问题上几个小时了,并试图在谷歌上找到任何线索,但没有运气。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.9 FATAL_ERROR)   

project (myDemo VERSION 0.1 LANGUAGES CXX)

### Didn't make any difference:
###set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
   
set (myDemo_VERSION_MAJOR 1)    
set (myDemo_VERSION_MINOR 0)

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)    
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})    
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/installation)

set(CMAKE_AUTOMOC ON)

set(SOURCES ${PROJECT_SOURCE_DIR}/src)

#### This made the build process reach 100%, but still exiting with the same error message
###set(Qt5_USE_STATIC_LIBS ON)    
###set(Qt5_USE_STATIC_RUNTIME ON)

# Find the necessary qt libraries    
find_package(Qt5 COMPONENTS Gui Quick Qml Multimedia)

if ( NOT Qt5_FOUND )    
 message(FATAL_ERROR "Package QT not found!")    
endif( )

# add the executable    
add_executable(myDemo src/main.cpp     
    src/somefile.cpp     
    src/somefile.h )

target_include_directories(myDemo PRIVATE Qt5_DIR)    
target_compile_features(myDemo PUBLIC cxx_std_17)     

target_link_libraries (myDemo Qt5::Gui Qt5::Qml Qt5::Quick Qt5::Multimedia ${ADDITIONAL_LIBRARIES} -static)      

install (TARGETS myDemo DESTINATION bin)

cmake
命令退出时不会出现错误,但
make
命令退出时会出现以下错误消息:

/usr/bin/ld:尝试静态链接动态对象`/opt/qt5/lib/libQt5Quick.so.5.9.1'

collect2:错误:ld 返回 1 退出状态

CMakeFiles/myDemo.dir/build.make:204:目标“../bin/myDemo”的配方失败

make[2]: *** [../bin/myDemo] 错误 1

CMakeFiles/Makefile2:67:目标“CMakeFiles/myDemo.dir/all”的配方失败

make[1]:*** [CMakeFiles/myDemo.dir/all] 错误 2

Makefile:129:目标“全部”的配方失败

make:*** [全部]错误2

我在virtuall机器上运行Ubuntu,并且该应用程序是使用QML/Qt(5.9)实现的。我正在使用 Virtual Studio Code(而不是 Qt Creator)。

我之前没有 CMake 经验。

有人知道如何链接静态 Qt 库吗?

编辑

问题可能是我有 Qt 的开源版本。难道是开源版本不支持静态构建的解释?

linux qt cmake qt5 static-linking
2个回答
0
投票

首先,请注意这个项目https://github.com/siavashk/qt5-static-hello-world,但感觉它只在MacOS上也许成功过。注释掉

set(QT_EXTRA_LIBS ...
中的
DoQtMess.cmake
行和
Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)
中的
main.cpp
行,它现在可以在运行
cmake
后在 Linux 中为我构建并运行,而无需任何特定于静态的参数。但是,我可以看到(使用
ldd
)它动态链接到我系统的 Qt 安装。

我可以通过调用

cmake
来使用不同的 Qt 安装:

$ export CMAKE_PREFIX_PATH="/path/to/other/qt/lib/cmake/Qt5"
$ cmake ..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/qt5-static-hello-world-master/build
$ make -j 24
Scanning dependencies of target helloworld_autogen
[ 12%] Automatic MOC for target helloworld
[ 12%] Built target helloworld_autogen
[ 25%] Generating qrc_resources.cpp
[ 37%] Generating ui_mainwindow.h
Scanning dependencies of target helloworld
[ 50%] Building CXX object CMakeFiles/helloworld.dir/qrc_resources.cpp.o
[ 62%] Building CXX object CMakeFiles/helloworld.dir/helloworld_autogen/mocs_compilation.cpp.o
[ 75%] Building CXX object CMakeFiles/helloworld.dir/mainwindow.cpp.o
[ 87%] Building CXX object CMakeFiles/helloworld.dir/main.cpp.o
[100%] Linking CXX executable helloworld
[100%] Built target helloworld
$ ldd helloworld
        linux-vdso.so.1 (0x00007fff6a3f4000)
        libQt5Widgets.so.5 => /lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f7e57460000)
        libQt5Gui.so.5 => /lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f7e56e75000)
        libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f7e5692c000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e5674a000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e5672f000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e5653b000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e563ec000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e563c9000)
        libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f7e56341000)
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f7e56309000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7e562ed000)
        libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f7e561e6000)
        libicui18n.so.66 => /lib/x86_64-linux-gnu/libicui18n.so.66 (0x00007f7e55ee7000)
        libicuuc.so.66 => /lib/x86_64-linux-gnu/libicuuc.so.66 (0x00007f7e55d01000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e55cfb000)
        libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f7e55c78000)
        libdouble-conversion.so.3 => /lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x00007f7e55c62000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7e55b37000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f7e57b3e000)
        libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f7e55a7f000)
        libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f7e55a4b000)
        libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7e5598c000)
        libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f7e5595f000)
        libicudata.so.66 => /lib/x86_64-linux-gnu/libicudata.so.66 (0x00007f7e53e9c000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7e53e29000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f7e53cec000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7e53cc2000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f7e53cbc000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f7e53cb2000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f7e53c98000)

ldd
的输出确认它将链接到那些
.so

使用相同的过程,但将

CMAKE_PREFIX_PATH
指向静态编译的安装树,肯定会编译更多文件:

cmake ..; make -j 24
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/qt5-static-hello-world-master/build
Scanning dependencies of target helloworld_autogen
[  2%] Automatic MOC for target helloworld
[  2%] Built target helloworld_autogen
[  4%] Generating ui_mainwindow.h
[  7%] Generating qrc_resources.cpp
Scanning dependencies of target helloworld
[  9%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QEglFSEmulatorIntegrationPlugin_Import.cpp.o
[ 11%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QEglFSKmsEglDeviceIntegrationPlugin_Import.cpp.o
[ 14%] Building CXX object CMakeFiles/helloworld.dir/helloworld_autogen/mocs_compilation.cpp.o
[ 16%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin_Import.cpp.o
[ 19%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QTiffPlugin_Import.cpp.o
[ 21%] Building CXX object CMakeFiles/helloworld.dir/main.cpp.o
[ 23%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QICOPlugin_Import.cpp.o
[ 26%] Building CXX object CMakeFiles/helloworld.dir/mainwindow.cpp.o
[ 30%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QEglFSKmsGbmIntegrationPlugin_Import.cpp.o
[ 28%] Building CXX object CMakeFiles/helloworld.dir/qrc_resources.cpp.o
[ 33%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QEglFSX11IntegrationPlugin_Import.cpp.o
[ 38%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QICNSPlugin_Import.cpp.o
[ 38%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QGifPlugin_Import.cpp.o
[ 40%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin_Import.cpp.o
[ 45%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QSvgPlugin_Import.cpp.o
[ 45%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QJpegPlugin_Import.cpp.o
[ 47%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QTgaPlugin_Import.cpp.o
[ 50%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_DrmEglServerBufferPlugin_Import.cpp.o
[ 52%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandBradientDecorationPlugin_Import.cpp.o
[ 54%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandEglClientBufferPlugin_Import.cpp.o
[ 57%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandFullScreenShellV1IntegrationPlugin_Import.cpp.o
[ 59%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandIviShellIntegrationPlugin_Import.cpp.o
[ 61%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandXCompositeEglClientBufferPlugin_Import.cpp.o
[ 64%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandWlShellIntegrationPlugin_Import.cpp.o
[ 66%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandXCompositeGlxClientBufferPlugin_Import.cpp.o
[ 69%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandXdgShellIntegrationPlugin_Import.cpp.o
[ 71%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandXdgShellV5IntegrationPlugin_Import.cpp.o
[ 73%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_QWaylandXdgShellV6IntegrationPlugin_Import.cpp.o
[ 76%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_ShmServerBufferPlugin_Import.cpp.o
[ 78%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5WaylandClient/Qt5WaylandClient_VulkanServerBufferPlugin_Import.cpp.o
[ 80%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWaylandIntegrationPlugin_Import.cpp.o
[ 85%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWaylandXCompositeGlxPlatformIntegrationPlugin_Import.cpp.o
[ 85%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWaylandXCompositeEglPlatformIntegrationPlugin_Import.cpp.o
[ 88%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWbmpPlugin_Import.cpp.o
[ 90%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QXcbEglIntegrationPlugin_Import.cpp.o
[ 92%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QWebpPlugin_Import.cpp.o
[ 95%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin_Import.cpp.o
[ 97%] Building CXX object CMakeFiles/helloworld.dir/opt/Qt5.15.5-static/lib/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin_Import.cpp.o
[100%] Linking CXX executable helloworld
[100%] Built target helloworld

ldd
的输出确认了没有对动态Qt库的引用(至少在启动时没有)。

$ ldd helloworld
        linux-vdso.so.1 (0x00007fffa0d84000)
        libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007f51f45cb000)
        libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f51f4546000)
        libtiff.so.5 => /lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f51f44c5000)
        libxcb-glx.so.0 => /lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f51f44a8000)
        libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f51f4494000)
        libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f51f448d000)
        libxcb-icccm.so.4 => /lib/x86_64-linux-gnu/libxcb-icccm.so.4 (0x00007f51f4486000)
        libxcb-image.so.0 => /lib/x86_64-linux-gnu/libxcb-image.so.0 (0x00007f51f4281000)
        libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f51f427c000)
        libxcb-keysyms.so.1 => /lib/x86_64-linux-gnu/libxcb-keysyms.so.1 (0x00007f51f4277000)
        libxcb-randr.so.0 => /lib/x86_64-linux-gnu/libxcb-randr.so.0 (0x00007f51f4264000)
        libxcb-render-util.so.0 => /lib/x86_64-linux-gnu/libxcb-render-util.so.0 (0x00007f51f425b000)
        libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f51f424c000)
        libxcb-shape.so.0 => /lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007f51f4247000)
        libxcb-sync.so.1 => /lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f51f423d000)
        libxcb-xfixes.so.0 => /lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007f51f4233000)
        libxcb-xinerama.so.0 => /lib/x86_64-linux-gnu/libxcb-xinerama.so.0 (0x00007f51f422e000)
        libxcb-xkb.so.1 => /lib/x86_64-linux-gnu/libxcb-xkb.so.1 (0x00007f51f420e000)
        libxcb-xinput.so.0 => /lib/x86_64-linux-gnu/libxcb-xinput.so.0 (0x00007f51f41ea000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f51f41c0000)
        libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6 (0x00007f51f41b5000)
        libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6 (0x00007f51f4197000)
        libxkbcommon-x11.so.0 => /lib/x86_64-linux-gnu/libxkbcommon-x11.so.0 (0x00007f51f418c000)
        libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f51f415d000)
        libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007f51f4158000)
        libEGL.so.1 => /lib/x86_64-linux-gnu/libEGL.so.1 (0x00007f51f4143000)
        libXcomposite.so.1 => /lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007f51f413e000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f51f4001000)
        libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f51f3fba000)
        libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f51f3ef9000)
        libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007f51f3eee000)
        libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007f51f3edd000)
        libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f51f3e55000)
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f51f3e1d000)
        libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f51f3d18000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f51f3cfa000)
        libdouble-conversion.so.3 => /lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x00007f51f3ce4000)
        libicui18n.so.66 => /lib/x86_64-linux-gnu/libicui18n.so.66 (0x00007f51f39e5000)
        libicuuc.so.66 => /lib/x86_64-linux-gnu/libicuuc.so.66 (0x00007f51f37ff000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f51f37f9000)
        libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f51f3776000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f51f364b000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f51f3628000)
        libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f51f35e6000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f51f3404000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f51f32b5000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f51f329a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f51f30a6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f51f57af000)
        libwayland-server.so.0 => /lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007f51f3090000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f51f3062000)
        libwebp.so.6 => /lib/x86_64-linux-gnu/libwebp.so.6 (0x00007f51f2ff8000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f51f2f4f000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f51f2f26000)
        libjbig.so.0 => /lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f51f2d16000)
        libxcb-util.so.1 => /lib/x86_64-linux-gnu/libxcb-util.so.1 (0x00007f51f2b10000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f51f2b0a000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f51f2b02000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f51f2af9000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f51f2add000)
        libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f51f2a25000)
        libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007f51f2a19000)
        libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f51f29e5000)
        libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f51f29b8000)
        libicudata.so.66 => /lib/x86_64-linux-gnu/libicudata.so.66 (0x00007f51f0ef5000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f51f0e82000)

这是一个重要的收获:在我看来,在 Qt-cmake 集成/构建支持工作的某个地方,现在比以前容易很多。也就是说,当我尝试使用 Qt 5.12 执行此操作时,我最终插入了很多

Q_IMPORT_PLUGIN
行,这是一个反复试验的过程,以找出需要哪些行。因此,我要指出静态链接 Qt 的步骤是使用版本 5.15。

最重要的是,它实际上按预期运行!


-1
投票

如果你在Windows下工作,我建议使用MSYS2,然后使用pacman静态安装qt并安装cmake和gcc(如果你想使用pro文件),这样会减少以后的工作量。然后在 Qt Creator 中调整套件编译器以使用您刚刚安装的 msys2 中的静态编译器,因为用于您的应用程序和库的编译器必须相同。这些命令是针对编译器的,我不记得安装 qt 的命令了。

 pacman -S mingw-w64-x86_64-gcc

 gcc -v #to make sure gcc is installed

 g++ -v # check g++ compiler

 pacman -S make

 pacman --needed -S mingw-w64-x86_64-toolchain

如果您在 Mac 上工作,该过程将是相同的,但使用brew,您的 cmake 文件中会有一个例外,添加此内容

set(CMAKE_EXE_LINKER_FLAGS "-lobjc -framework IOKit -framework CoreFoundation")
© www.soinside.com 2019 - 2024. All rights reserved.