Agregar libcurl estático a Code :: Blocks IDE

No puedo encontrar la forma de agregar correctamente una biblioteca libcurl estática a mi Code :: Blocks IDE. Quiero que esté estático porque entonces no se necesitan archivos .dll, que no están incluidos en Windows de forma predeterminada, durante el tiempo de ejecución de mi progtwig. Estoy usando este libcurl: http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (minGW sin OpenSSL)

Aquí están mis configuraciones globales del comstackdor: http://img845.imageshack.us/img845/1381/halpr.jpg

Estoy teniendo el siguiente error:

ld.exe || no se puede encontrar -lCURL_STATICLIB | || === Build finished: 1 errores, 0 advertencias === |

al comstackr este código:

include  include  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; } 

Obviamente, no encuentra CURL_STATICLIB, pero no tengo idea de por qué. Ni siquiera estoy seguro de si fue necesario agregar CURL_STATICLIB a mis configuraciones de enlazador (lo leí en otros foros). Encontré algunos tipos que tienen el mismo problema, pero no se responde correctamente en ningún lugar:

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

Estoy tan cansado de luchar con esto, por favor, ayúdame.

EDITAR:

Hola Victor, gracias por la respuesta!

Trataré de ser lo más detallado posible, para que no haya malentendidos. Entonces, aquí está la imagen del directorio / árbol de carpetas para mi carpeta C: \ libs \:

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

Como puede ver, también incluye el registro de comstackción, notará que el error esta vez es diferente al que publiqué anteriormente. Es porque cambié el comstackdor global y construí la configuración del proyecto.

Mi nueva configuración de Build Project: http://sofes.miximages.com/c%2B%2B/buildoptions.png Mi nueva configuración de Global Compiler: http://img225.imageshack.us/img225/4926/curl2.png

Estoy seguro de que configuré estas configuraciones incorrectamente y es por eso que no puedo comstackrlas.

De acuerdo, logré construir tu ejemplo exitosamente con libcurl usando enlaces estáticos. Los detalles involucrados para hacer este trabajo son bastante intrincados: configurarlo correctamente puede ser complicado para los incautos.

Estos son los pasos que usé para que esto funcione, asegúrese de seguirlos cuidadosamente:

  1. Vaya a Opciones de comstackción del proyecto-> Configuración del comstackdor-> # define : escriba CURL_STATICLIB . Cuando esto se define, el encabezado libcurl.h tendrá sus firmas de funciones preprocesadas para adaptarse a la vinculación estática. De lo contrario, se supone una vinculación dinámica y los nombres mutilados se convierten en _imp__* . Los errores no resueltos de su captura de pantalla indican que está intentando un enlace dynamic en lugar del enlace estático deseado.

  2. En Opciones de comstackción del proyecto-> Configuraciones del enlazador-> bibliotecas de enlaces, asegúrese de que contiene lo siguiente: curl, rtmp, idn, ssl, ssh2, criptografía, z, ws2_32, wldap32, winmm, gdi32 . Tenga en cuenta que el orden es importante. Debido a una deficiencia de diseño del enlazador gnu, las bibliotecas más dependientes deben figurar primero seguidas por las menos dependientes. Otros enlazadores como msvc link y borland’s ilinker no presentan tales problemas, las bibliotecas se pueden enumerar en cualquier orden.

  3. En Opciones de comstackción del proyecto-> Configuraciones del enlazador-> Otras opciones del enlazador agregan ‘-estatico’. Esto asegurará que se use la versión estática de ‘idn’. Si se omite este modificador, entonces su progtwig comstackdo podría depender de ‘libidn-11.dll’ para ejecutarse, que probablemente no sea lo que usted desea.

En este punto, debería ser capaz de comstackr y vincular progtwigs libcurl sin ningún problema. Un par de cosas que vale la pena mencionar,

  • En Otras opciones del vinculador, los otros conmutadores adicionales de la captura de pantalla no son necesarios. ‘libcurl.a’ ya está listado y cubierto por las bibliotecas de enlaces .

  • El ‘libcrypto.a’ parece cubrir las mismas referencias que el ‘libeay32.a’ por lo que solo se necesita uno de ellos. Sin embargo, ‘libeay32.a’ causa un vínculo dynamic a pesar de su mayor tamaño. Si desea que su aplicación sea ‘completamente autónoma’, use ‘libcrypto.a’ como en la captura de pantalla.

  • Si desea vincular dinámicamente en el futuro, simplemente reemplace la lista con ‘curldll’ en bibliotecas de enlaces y elimine la definición de CURL_STATICLIB . Las bibliotecas adicionales (por ejemplo, ssl, idn, rtmp, etc.) no son necesarias, ya que libcurl.dll ya las cubre.

  • Puede evitar la tediosa configuración propensa a errores de un nuevo progtwig libcurl empleando plantillas de usuario de bloques de código. (por ejemplo, Archivo-> Nuevo-> Proyecto-> Plantillas de usuario )

Con suerte, esto resuelve cualquier problema de comstackción que tenga con libcurl de una vez por todas.