【问题标题】:CMake build static executable fileCMake构建静态可执行文件
【发布时间】:2018-04-12 19:30:08
【问题描述】:

我想构建一个包含我使用的所有库(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

我在/usr/lib/x86_64-linux-gnu/ 中确实有libwebp.a 可用

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

我确实尝试添加#SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a"),但它仍然给出了同样的错误。

非常感谢!

【问题讨论】:

标签: c++ opencv ubuntu cmake dlib


【解决方案1】:

这个怎么样:

find_library(LIBWEBP_LOCATION libwebp.a)
target_link_libraries(adc_fr
        ${OpenCV_LIBS}
        dlib
        ${LIBWEBP_LOCATION}
        )

【讨论】:

  • 遇到了同样的错误。我认为链接器可以找到正确的位置,在这种情况下 /usr/lib/x86_64-linux-gnu/ 但它仍然使用共享的 .so 库。
  • 就在find_library下,你能把这个message(STATUS ${LIBWEBP_LOCATION})加进去看看结果吗?
猜你喜欢
  • 2014-08-30
  • 2017-03-29
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多