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

时间:2017-10-31 11:41:59

标签: qt cmake qt5 static-linking

我正在尝试使用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:目标'all'失败的食谱

     

make:*** [all]错误2

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

我之前没有使用过CMake。

有没有人有任何想法如何链接静态Qt库?

修改

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

1 个答案:

答案 0 :(得分:-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")