在具有cmake或gcc的Linux上创建一个随时可用的安装软件包,包括切碎的依赖项

时间:2018-09-10 11:31:07

标签: linux gcc cmake

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

2 个答案:

答案 0 :(得分:1)

当您需要为多种安装程序(Debian,RH,Arch等)创建本机软件包时,它真的很快就变得毛茸茸了。

如果您只需要干净的可复制物品才能将其放在盒子上并运行-我强烈建议您将其包装为Docker容器。

您从一些轻量级Linux发行版容器开始(Alpine是最新趋势),将其派生到具有C和C ++运行时以及您依赖的其他任何内容的容器,并将其称为“我的产品容器”。从中得出一个安装了C ++编译器和调试器的文件,并将其称为“我的开发容器”。

我们实际上在前一阵子写了little memo,同时使我们的开源爱好可供其他人使用。

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

答案 1 :(得分: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

然后,我在开发计算机上创建的可执行文件可以在此处顺利运行!

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