Símbolos no resueltos al vincular un programa usando libcurl

4 minutos de lectura

avatar de usuario
Kyle

Sé que esto son preguntas de programación, pero estoy frustrado tratando de descubrir qué estoy haciendo mal.

Estoy usando Visual Studio 2010 y seguí todos los pasos aquí: http://curl.haxx.se/libcurl/c/visual_studio.pdf

Cuando intento compilar mi solución, sigo recibiendo este error:

1>------ Build started: Project: LibCurl, Configuration: Debug Win32 ------
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function _main
1>C:\Users\Kyle\Documents\Visual Studio 2010\libcurl\VisualStudio\LibCurl\Debug\LibCurl.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Fuente:

// LibCurl.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#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;
}

  • asegúrese de haber realizado los pasos 4.3.2 y 4.3.3 del pdf vinculado. Está recibiendo un error del enlazador, lo que significa que no está enlazando con el archivo libcurl.lib.

    –Jesse Beder

    14 de noviembre de 2010 a las 8:43

  • Gracias Jesse. Reharé los pasos más lentamente y veré por qué no se vincula. ¡Gracias por la ayuda!

    – Kyle

    14 de noviembre de 2010 a las 9:02


He estado usando la versión estática de libcurl, y para vincular mi programa correctamente, tuve que agregar una definición:

CURL_STATICLIB

para construir la configuración de mi proyecto.

  • Este es probablemente uno de los problemas comunes: si está utilizando libcurl como una biblioteca ESTÁTICA, debe definir CURL_STATICLIB no solo en el proyecto curl, sino también en el proyecto donde desea usarlo.

    – PeterK

    29 de octubre de 2012 a las 8:58

  • Otro punto interesante que acabo de conocer: puedes definirlo en el proyecto principal y olvidarte de mencionarlo en otro vcproj que estés usando.

    – Dmitri Kochkin

    11 de febrero de 2013 a las 16:36

  • Muchas gracias. vaya a la configuración del proyecto vc ++ | c++ | preprocesador y agregue CURL_STATICLIB a las definiciones del preprocesador y funciona

    – Luna plateada

    22 de febrero de 2015 a las 10:54

  • Me acabas de ahorrar un montón de trabajo y un montón de cabello que de otro modo me habría arrancado

    – Rick

    4 de junio de 2015 a las 6:13

  • ¿Se acumula solo en MSVC?

    – triclosán

    17 de julio de 2015 a las 13:29

Además de definir CURL_STATICLIBpara mí también fue necesario vincular las siguientes dependencias (incluyendo libcurl.lib o libcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib

  • Definición CURL_STATICLIB salvó mi tocino! ¡Gracias!

    – T4cC0re

    30 de mayo de 2017 a las 18:06

  • Me faltaban varias dependencias más, esta respuesta me ayudó stackoverflow.com/questions/50477484/…

    – Stan

    16 oct 2020 a las 10:23

Me encontré con un problema similar: descubrí que estaba haciendo referencia a la ubicación de 64 bits de libcurl.lib. Cambió el directorio de enlaces a la ubicación de 32 bits y el proyecto se compiló perfectamente.

Parece que las bibliotecas no se vinculan correctamente. Asegúrese de que el directorio de la biblioteca esté configurado para incluir la ruta completa a la dll libcurl. También asegúrese de que esta biblioteca esté realmente agregada a su proyecto.

Yo tuve el mismo problema. Escribí cómo finalmente pude hacer CurlLib funciona, aquí:
http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/ si desea echar un vistazo. ¡Buena suerte!

avatar de usuario
Zsolti

Después de muchas ideas y configuraciones, resolví el problema agregando esto:

#pragma comment(lib, "lib/libcurl_a.lib")

donde libcurl_a.lib es el nombre del archivo curl lib y lib es la carpeta que lo contiene.

Tuve el mismo error, el problema que tuve fue que construí cURL de acuerdo con esta respuesta SO, que no funciona si desea / MT como una opción de biblioteca en tiempo de ejecución.

Para compilar cURL con respecto a /MT y /MTD, también debe ejecutar Set RTLIBCFG=static antes de construirlo con el nmake comando en la misma consola. Se puede encontrar el proceso completo de construcción de cURL de esta manera aquí.

Edit: En caso de que la URL deje de funcionar, también pondré las instrucciones aquí:

  • Descargue y extraiga el código fuente de CUrl en un directorio temporal. http://curl.haxx.se/download.htmlen este tutorial usaremos curl-7.37.0
  • Abra el “Símbolo del sistema de Visual Studio (2010)”
  • Vaya a la carpeta Winbuilds. \curl-7.37.0\winbuild.
  • Escribe Set RTLIBCFG=static en el símbolo del sistema y pulsa enter. Esto configurará el compilador para compilar para /MT y /MTd.
  • Escribe nmake /f MakeFile.vc mode=static DEBUG=yes para construir la versión de depuración o
  • Escribe nmake /f MakeFile.vc mode=static DEBUG=no para construir las versiones de lanzamiento.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad