CMake构建静态可执行文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake构建静态可执行文件相关的知识,希望对你有一定的参考价值。

我想构建一个可执行文件,其中包含我使用的所有库(opencv,dlib),因此它可以在任何计算机上运行。这是我目前的CMakeList.txt

cmake_minimum_required(VERSION 3.5.1)
project(adc_fr)

set(CMAKE_CXX_STANDARD 14)

add_subdirectory(/media/sf_dlib-19.9/dlib dlib_build)

FIND_PACKAGE(OpenCV REQUIRED)

set(SOURCE_FILES
        FDetect.cpp
        FDetect.h
        FExtract.cpp
        FExtract.h
        main.cpp
        )

add_executable(adc_fr ${SOURCE_FILES})
set_target_properties(adc_fr PROPERTIES LINK_FLAGS "-static")

target_link_libraries(adc_fr
        ${OpenCV_LIBS}
        dlib
        )

这是我在链接时遇到的错误

/usr/bin/ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libwebp.so'
collect2: error: ld returned 1 exit status
CMakeFiles/adc_fr.dir/build.make:409: recipe for target 'adc_fr' failed
make[2]: *** [adc_fr] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/adc_fr.dir/all' failed
make[1]: *** [CMakeFiles/adc_fr.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

我确实在libwebp.a/usr/lib/x86_64-linux-gnu/

我如何强制使用静态libwebp.a而不是libwebp.so

我确实尝试添加qazxsw大便,但它仍然有相同的错误。

非常感激!

答案

这个怎么样:

#SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")

以上是关于CMake构建静态可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使 cmake 将 D 参数传递给 ar 以可重现地构建静态库

如何方便地强制 CMAKE 使用特定版本的静态库文件?

cmake cpp构造项目

cmake创建库和使用库工程示例(多个cmakelists)

cmake创建库和使用库工程示例(多个cmakelists)

使用外部附加头文件构建 cmake 对象库