如何在CLion中静态链接Qt5与CMake

How to statically link Qt5 with CMake in CLion?

本文关键字:链接 Qt5 CMake 静态 CLion      更新时间:2023-10-16

我下载了Qt的源代码,用-static标志编译成/usr/local/Qt5_static/。我创建了一个空项目,并像这样改变了CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(Splines)
set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wextra -pedantic -static -stdlib=libc++ -lc++abi -v")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
set(SOURCE_FILES main.cpp)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(Qt5_DIR "/usr/local/Qt5_static/")
find_package(Qt5Widgets)
add_executable(Splines ${SOURCE_FILES})
target_link_libraries(Splines Qt5::Widgets)

链接器错误。

/usr/bin/ld: attempted static link of dynamic object `/usr/lib/libQt5Widgets.so.5.7.0'
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)

看起来链接器试图链接共享库而不是静态库。我尝试了CMakeLists.txt的其他变体,但失败了。

如何静态链接Qt与cmake正确?(抱歉我的英语不好)

CMAKE_CXX_FLAGS编译标志,但target_link_libraries使用链接标志,即CMAKE_EXE_LINKER_FLAGS。对于静态链接,您需要将-static添加到链接标志