Автономное приложение на C, хорошая идея? - PullRequest
0 голосов
/ 15 января 2011

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

или есть функция, которая это делает? Я программирую в среде Linux ...

Ответы [ 4 ]

2 голосов
/ 15 января 2011

Вы говорите об исходном коде вашего приложения или о бинарном приложении?

Ответ, который я дам для обоих случаев, зависит от того, какие библиотеки вы используете.

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

В любом случае, не стоит сильно беспокоиться о вашем исходном коде: маленькие люди будут создавать ваше приложение, и они, вероятно, что-то знают о программировании и о том, как работает система Linux;не будет большой проблемой требовать много (также не очень распространенных) зависимостей для сборки вашего приложения.
Что касается бинарной версии, это может быть немного более проблематично, так как она будет использоваться конечными пользователямикоторые часто ничего не знают о библиотеках и программировании: вы можете статически связать самые маленькие и самые необычные библиотеки с вашим двоичным файлом, чтобы иметь меньше зависимостей.

0 голосов
/ 15 января 2011

Дублировать поведение Mac OS X .app в простой системе POSIX сложно, потому что очень трудно гарантировать, что процесс сможет найти свой собственный исполняемый файл (есть несколько способов, которыми почти всегда будет работать. ..). Mac OS X предоставляет службу ОС для этого, а Linux (например) - нет.

Как только вы совершите этот подвиг, это станет возможным. Хотя, как уже упоминали другие, он теряет возможность делиться потребностями в ресурсах (дисковое пространство, пространство ОЗУ, пространство кэша) с другими программами, использующими те же библиотеки, потому что вы используете статические копии или динамически загружаете свои собственные копия из пакета .app-like.

0 голосов
/ 15 января 2011

Запустите ldd в своей программе, чтобы обнаружить все зависимости, затем скопируйте их в свой каталог и добавьте скрипт-обертку программы, который выдает

#!/bin/sh
LD_LIBRARY_PATH="${0##*/}:$LD_LIBRARY_PATH" exec "${0##*/}/real-program" "$@";
0 голосов
/ 15 января 2011

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

Альтернатива, если этоне просто одноразовый проект, это создание RPM-пакета, совместимого со стандартной базой Linux, и ограничение на связывание с библиотеками и символами, которые определяет LSB.

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