使用cmake或gcc在linux上创建一个可立即使用的安装包,包括shred依赖项

问题描述 投票:0回答:2

我已经完成了一个使用多个库的小项目。 CMakeList.txt看起来像这样:

cmake_minimum_required(VERSION 3.5)
project(tf_ct_log C)
set(CMAKE_C_STANDARD 99)
include_directories(include /usr/local/include/hiredis /usr/include/openssl)
link_directories(/usr/lib/x86_64-linux-gnu)
set(HDR include/ct_logger.h)
add_executable(tf_ct_logger src/main.c src/ct_logger.c ${HDR})
find_package(OpenSSL REQUIRED)
find_package(Threads REQUIRED)
find_library(PostgreSQL  REQUIRED)
find_library(jansson REQUIRED)
target_link_libraries(tf_ct_logger OpenSSL::SSL jansson pthread pq)

我希望能够构建一个可以安装在另一台机器上的软件包,而无需下载任何依赖项。使用ldd,我已经获得了应用程序的所有依赖项,并将这些文件(libxyz.so...)复制到我项目中的子目录deps中。如何使用这些依赖项创建该包,以便最终用户只使用我的项目的目标文件以及依赖项库来创建可执行文件?

linux gcc cmake
2个回答
1
投票

当您需要为多种安装程序(Debian,RH,Arch等)创建本机程序包时,它会非常快速,特别是如果涉及自定义。

如果你只是需要一个干净的可重复性来将它放在盒子上并运行 - 我强烈建议将其包装为Docker容器。

你从一些轻量级的Linux发行版容器开始(Alpine是最新的趋势),将它派生成一个具有C和C ++运行时以及你所依赖的任何其他东西并称之为“我的prod容器”。从中派生出一个安装了C ++编译器和调试器的程序,并将其称为“我的开发容器”。

我们实际上写了一段时间的little memo,同时使我们的开源爱好可用于其他人。

您可能仍需要清理CMake文件到“安装”目标的工作范围(我的是here)。


0
投票

我可能没有正确表达自己。我只想从我的项目中编译和构建可执行文件,然后找到一种方法将其复制到另一台机器上,而无需在运行应用程序之前安装所有依赖项。

我找到的解决方案(在经验丰富的开发人员的帮助下)如下:

1-使用ldd获取所有依赖项

2-复制目录dependencies中的依赖项

3-在目标环境中,将dependencies的内容复制到/usr/local/lib/myapp/

4-在目标环境中,转到/etc/ld.so.conf.d/

5-创建文件myapp.conf,其中包含一行:/usr/local/lib/myapp

6-运行ldconfig

然后,我在我的开发机器上创建的可执行文件在这里顺利运行!

当然,我在那里描述的所有步骤都必须列在自动化脚本中

© www.soinside.com 2019 - 2024. All rights reserved.