2009-05-13 3 views
4

Я обычно разработчик Java, но я пишу библиотеку C++ прямо сейчас, они будут использовать LibCurl. И я очень не осведомлен в мире C++!Библиотека C++ требует LibCurl - пользователям приложения потребуется libcurl?

Что я пишу, это infact библиотека для использования другими разработчиками (ее клиентский код, используемый для доступа к нашему API).

Завершите ли пользователи, чтобы был установлен libcurl, или разработчики каким-то образом включили это в EXE или пакет как-то?

На самом деле то же самое, я могу использовать QT в библиотеке, будет ли они обязательными для установки? Я предполагаю, что он работает, так это то, что разработчикам, конечно, это понадобится, но как только его скомпилировать в двоичный файл не требуется? В отличие от Java, где вам нужно файлы Jar все вместе ...

Приветствий за любую помощь, Алан

ответ

3

Если вы связываете libcurl статически, то конец -user не требует libcurl, так как он будет связан с исполняемым файлом непосредственно во время компиляции.

Если вы l ink libcurl динамически, тогда конечный пользователь требует, чтобы libcurl был установлен в их системе и доступен как библиотека общих объектов.

Однако вы находитесь в другом месте. Вы пишете библиотеку для использования другими разработчиками. Таким образом, ваш конечный пользователь на самом деле не является конечным пользователем. В таких сценариях «лучше» обеспечить динамическую связь с libcurl.

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

Однако ...

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

Надежда, что помогает ...

+0

Однако, если вы динамически связываетесь, вы должны убедиться, что ваш код работает с различными версиями libCurl. В противном случае у пользователя возникает проблема, если другой lib нуждается в конкретной версии –

2

Многие библиотеки могут быть использованы либо statically или dynamically связаны между собой. Завиток один из них (смотри, например, this message, и я бы сказал, что это разумно сделать это. QT достаточно огромен, так что вы должны динамически связать его, если это вообще возможно. Тем не менее, даже это может быть statically linked.

Существенной разница между статическим и динамическим связыванием заключается в том, что статическая привязка включает в себя библиотеку в объектном коде приложения, тогда как при динамической компоновке приложение обращается к библиотеке по требованию из системы, на которой она установлена.

0

Я написал заявление с закрытым исходным кодом в C++, который связан с Libcurl в его более ранних версиях.

Это оказалось ошибкой, потому что каждая версия Linux имеет другой libcurl. Это было гораздо менее совместимо с кросс-версией, чем glibc и libstdC++. Я не хотел отправлять библиотеку libcurl с приложением.

У меня были простые потребности. Поэтому я переписал приложение, чтобы вызвать завиток, используя system(). Это работало на каждую версию Linux.

Смежные вопросы