Добавление статического 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 раз и навсегда.