Библиотека C ++ требует LibCurl - понадобится ли пользователям приложения libcurl? - PullRequest
4 голосов
/ 13 мая 2009

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

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

Потребуется ли конечным пользователям установить libcurl, или разработчики могут как-то включить это в EXE-файл или каким-то образом упаковать его?

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

Приветствия за любую помощь, Alan

Ответы [ 3 ]

3 голосов
/ 13 мая 2009

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

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

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

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

Однако ...

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

Надеюсь, это поможет ...

2 голосов
/ 13 мая 2009

Многие библиотеки могут использоваться либо статически , либо динамически связанными. Curl является одним из них (см., Например, это сообщение , и я бы сказал, что это разумно. QT довольно большой, поэтому вы должны динамически связывать его, если это вообще возможно. Однако даже это может быть статически связаны .

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

0 голосов
/ 25 июня 2009

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

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

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

...