Добавление статического 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, используя статическую связь. Детали, связанные с этой работой, довольно сложны - правильная настройка может стать сложной для неосторожных.
вот шаги, которые я использовал, чтобы сделать эту работу, обязательно следуйте им тщательно:
на параметры сборки проекта- > настройки компилятора - > #defines: типа в
CURL_STATICLIB. Когда это определено libcurl.H заголовок будет иметь свой сигнатуры функций, предварительно обработанные в соответствии со статической связью. В противном случае предполагается динамическая связь, и искаженные имена становятся_imp__*. Неразрешенные ошибки на скриншоте указывают на то, что он пытается создать динамическую ссылку, а не нужную статическую ссылку.
под параметры сборки проекта- > настройки компоновщика - >библиотеки ссылок убедитесь, что он содержит следующее: скручиваемость, RTMP, то иди, SSL и ssh2, крипто, з, ws2_32 в, wldap32 в, winmm, gdi32. Обратите внимание, что порядок важен. Из-за недостатка дизайна компоновщика gnu сначала должны быть перечислены наиболее зависимые библиотеки, а затем наименее зависимые. Другие компоновщики, такие как msvc link и ilinker borland, не показывают таких проблем-библиотеки могут быть перечислены в любом порядке.
под параметры сборки проекта- > настройки компоновщика - >другие параметры компоновщика добавить '- 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 раз и навсегда.