Включение сторонних библиотек в приложения C - PullRequest
2 голосов
/ 14 декабря 2010

Я немного наивен, когда дело доходит до разработки приложений на C. Я написал много кода для языка программирования, над которым я работаю, и хочу включить материал из ICU (для поддержки интернационализации и юникода)).

Проблема в том, что я просто не уверен, существуют ли какие-либо соглашения о включении сторонней библиотеки.для чего-то вроде readline, где многие системы, вероятно, уже установят его, безопасно просто ссылаться на него (я думаю).Но что если я захочу включить версию библиотеки в свой собственный код?Это часто или я думаю, что все это неправильно?

Ответы [ 5 ]

2 голосов
/ 14 декабря 2010

Если для вашего кода требуются сторонние библиотеки, вам необходимо проверить их перед сборкой.В Linux, по крайней мере с открытым исходным кодом, канонический способ сделать это - использовать Autotools для написания скрипта configure, который проверяет наличие библиотек и способы их использования.К счастью, это довольно автоматизировано, и есть множество примеров.В основном вы пишете configure.ac (и / или Makefile.am), которые являются исходными файлами для autoconf и automake соответственно.Они преобразуются в configure и Makefile.in, а ./configure условно создает Makefile с любыми заданными вами параметрами времени конфигурации.

Обратите внимание, что это действительно только для Linux.Я предполагаю, что канонический способ сделать это в Windows с помощью файла проекта для IDE ...

1 голос
/ 14 декабря 2010

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

1 голос
/ 14 декабря 2010

Если вы говорите о доставке вашего программного обеспечения конечным пользователям и беспокоитесь о зависимостях - вы должны предоставить им правильные пакеты / установщики, которые включают в себя зависимости, необходимые для запуска вашего программного обеспечения, или иным образом убедиться, что пользователь может их получить (в соответствии с местными законами, законами об экспорте и т. д. и т. д., но это все о лицензировании).

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

1 голос
/ 14 декабря 2010

Это зависит от операционной системы, на которую вы ориентируетесь. В системах Linux и Unix вы обычно видите динамическое связывание, поэтому приложение будет использовать библиотеку, которая уже установлена ​​в системе. Если вы сделаете это, это означает, что пользователь может получить библиотеку, если у нее ее еще нет. Менеджеры пакетов в Linux сделают это за вас, если вы упакуете свое приложение в формат пакета дистрибутива.

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

1 голос
/ 14 декабря 2010

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

...