我是CMAKE的新手。我正在尝试制作“胖可执行文件”。
我提到的fat可执行文件是一个可执行的二进制文件,它包含所有共享库,可以在另一个环境中运行。
示例(故障情况)
有一台我用来开发的计算机,有GCC,Boost库,librados等等。
这是一台计算机B,我希望它执行我构建的二进制文件。
- 当然,A机和B机都有一些条件,相同的Intel CPU架构(i7),相同的CentOS。
我在ComputerA中使用CMAKE和cmake .. && make
命令构建了二进制文件,然后将该文件复制到ComputerB并执行。
当我在计算机B中执行复制的二进制文件时,它显示如下。
[root@ComputerB ~]# ./binaryFile 123.123.123.123
./binaryFile: error while loading shared libraries: libboost_json.so.1.80.0: cannot open shared object file: No such file or directory
我知道这个错误消息是什么意思。没有它需要的共享库。所以,我想在这个社区里问的是,什么是包含共享库的CMAKE命令。
类似的事情:胖JAR
我之所以叫“胖可执行文件”,是因为有a word "fat JAR" in Java,我对Java不熟悉,但它是Java社区常用的词。
我的CMAKE文件
它包含一些像Boost,Rados,RBD等库(根据开发进度会有更多)
cmake_minimum_required(VERSION 3.2.0)
project(BinaryHelper VERSION 0.1.0)
find_package(Boost REQUIRED COMPONENTS json)
include_directories(${Boost_INCLUDE_DIR})
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lrados -std=c++17")
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
add_executable(
${PROJECT_NAME}
main.cpp
utils/binary.cpp
utils/message.cpp
utils/header.cpp
)
target_link_libraries (
${PROJECT_NAME}
${Boost_LIBRARIES}
rados
rbd
Threads::Threads
)
1条答案
按热度按时间7kqas0il1#
多亏了@HolyBlackCat,我用静态链接解决了这个问题。
已修改的CMAKE
还有其他(修改过的)关键字
add_library
、set_target_properties
、target_link_libraries
。