Добавление статического libcurl в Code:: Blocks IDE

Я не могу понять, как правильно добавить статическую библиотеку libcurl в мой код::Blocks IDE. Я хочу, чтобы он был статичным, потому что тогда нет .dll файлы, которые не включены в Windows по умолчанию, необходимы во время выполнения моей программы. Я использую этот libcurl: http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav= - (minGW без OpenSSL)

вот мои глобальные настройки компилятора: http://img845.imageshack.us/img845/1381/halpr.jpg

Я получение следующей ошибки:

ld.exe / / не удается найти-lCURL_STATICLIB / / / = = = сборка завершена: 1 Ошибка, 0 предупреждений ===/

при компиляции этот код:

include <stdio.h>
include <curl/curl.h>

int main(void)
{
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);

/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}

очевидно, что он не находит CURL_STATICLIB, я понятия не имею, почему. Я даже не уверен, Нужно ли было добавлять CURL_STATICLIB в Мои настройки компоновщика(я читал его на других форумах). Я нашел некоторых парней, имеющих ту же проблему, но на нее неправильно ответили место:

stackoverflow.com/questions/4176503/frustrated-with-libcurl

forums.codeblocks.org/index.php?topic=11391.0

old.nabble.com/gcc-working-with-libcurl-td20506927.html

forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html

Я так устал бороться с этим, пожалуйста, помогите мне.

изменить:

Здравствуйте, Виктор, спасибо ответ!

Я постараюсь быть как можно более подробным, чтобы не было недопонимания. Итак, вот изображение дерева каталогов / папок для моего C:libs папка:

http://img199.imageshack.us/img199/6977/curl1.png

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

мои новые настройки проекта сборки:http://img863.imageshack.us/img863/4404/buildoptions.png Мои новые глобальные настройки компилятора: http://img225.imageshack.us/img225/4926/curl2.png

Я уверен, что я настроил эти настройки неправильно, и поэтому я не могу его скомпилировать.

1 ответов


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

вот шаги, которые я использовал, чтобы сделать эту работу, обязательно следуйте им тщательно:

  1. на параметры сборки проекта- > настройки компилятора - > #defines: типа в CURL_STATICLIB. Когда это определено libcurl.H заголовок будет иметь свой сигнатуры функций, предварительно обработанные в соответствии со статической связью. В противном случае предполагается динамическая связь, и искаженные имена становятся _imp__*. Неразрешенные ошибки на скриншоте указывают на то, что он пытается создать динамическую ссылку, а не нужную статическую ссылку.

  2. под параметры сборки проекта- > настройки компоновщика - >библиотеки ссылок убедитесь, что он содержит следующее: скручиваемость, RTMP, то иди, SSL и ssh2, крипто, з, ws2_32 в, wldap32 в, winmm, gdi32. Обратите внимание, что порядок важен. Из-за недостатка дизайна компоновщика gnu сначала должны быть перечислены наиболее зависимые библиотеки, а затем наименее зависимые. Другие компоновщики, такие как msvc link и ilinker borland, не показывают таких проблем-библиотеки могут быть перечислены в любом порядке.

  3. под параметры сборки проекта- > настройки компоновщика - >другие параметры компоновщика добавить '- static'. Это позволит убедиться, что используется статическая версия "idn". Если этот переключатель опущен, тогда ваша скомпилированная программа может зависеть от ' libidn-11.dll файлы для запуска, который, вероятно, не то, что вы хотите.

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

  • под другие параметры компоновщика другие дополнительные переключатели с вашего скриншота не нужны. 'libcurl использует.a ' уже перечислен и покрыт библиотеки ссылка.

  • ' libcrypto.кажется, что " A "охватывает те же ссылки, что и" libeay32.а значит, нужен только один из них. Однако, libeay32.a ' вызывает динамическую связь, несмотря на ее больший размер. Если вы хотите, чтобы ваше приложение было "полностью автономным", используйте libcrypto.а вместо этого, как на скриншоте.

  • Если вы хотите связать динамически в будущем, просто замените список на "curldll" под ссылка библиотеки и удалить CURL_STATICLIB определить. Дополнительные библиотеки (например. ssl, idn, rtmp etc.) не нужны после libcurl.DLL, уже покрывает их.

  • вы можете избежать утомительной подверженной ошибкам настройки новой программы libcurl, используя пользовательские шаблоны codeblocks. (напр. Файл - >Создать - > Проект - > пользовательские шаблоны)

надеюсь, это решит любые проблемы сборки, которые у вас есть с libcurl раз и навсегда.