使用 cmake 或 gcc 在 Linux 上创建一个即用型安装包,包括 shred 依赖项



我已经完成了一个使用多个库的小项目。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子目录中。如何使用这些依赖项创建该包,以便最终用户仅使用项目的目标文件以及依赖项库来创建可执行文件?

当你需要为多种风格的安装程序(Debian、RH、Arch 等(创建一个原生软件包时,它很快就会变得非常棘手,尤其是在涉及定制的情况下。

如果你只需要一个干净的可重现的东西来把它放在一个盒子上并运行——我强烈建议你考虑把它打包成一个Docker容器。

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

我们实际上在不久前写了一个小备忘录,同时让我们的开源爱好可供其他人使用。

您可能仍然需要清理您的 CMake 文件,以使"安装"目标有效(我的在这里(。

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

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

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

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

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