Создайте готовый установочный пакет в Linux с cmake или gcc, включая зависимости shred - PullRequest
0 голосов
/ 10 сентября 2018

Я завершил небольшой проект, который использует несколько библиотек. 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 голосов
/ 10 сентября 2018

Очень быстро, когда вам нужно создать собственный пакет для нескольких разновидностей инсталляторов (Debian, RH, Arch и т. Д.), Особенно если требуется настройка.

Если вам просто нужна чистая воспроизводимая вещь, чтобы поставить ее на коробку и запустить - я настоятельно рекомендую упаковывать ее как контейнер Docker .

Вы начинаете с какого-то облегченного дистрибутивного контейнера Linux ( Alpine - это последняя тенденция), выводите его в один с C и C ++ средой выполнения и всем остальным, от чего вы зависите, и называете это "мой контейнер prod". Из этого вы извлекаете один с установленным компилятором C ++ и отладчиком и называете его «мой контейнер разработчика».

Мы фактически написали небольшую заметку некоторое время назад, делая наше хобби с открытым исходным кодом пригодным для других.

Вероятно, вам все равно нужно будет очистить файл CMake до такой степени, чтобы цель "install" работала (у меня здесь ).

0 голосов
/ 10 сентября 2018

Возможно, я не выразил себя правильно. Я просто хотел скомпилировать и собрать исполняемые файлы из моего проекта, а затем найти способ скопировать его на другой компьютер без необходимости устанавливать все зависимости перед запуском приложения.

Решение, которое я нашел (с помощью более опытного разработчика), было следующим:

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

Затем исполняемый файл, созданный на моей машине для разработки, работает без проблем!

Конечно, все шаги, которые я описал, должны быть перечислены в скрипте для автоматизации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...