programing

libcurl을 사용하여 프로그램을 연결할 때 확인되지 않은 기호

mailnote 2023. 8. 9. 20:58
반응형

libcurl을 사용하여 프로그램을 연결할 때 확인되지 않은 기호

이것이 질문을 프로그래밍하는 것이라는 것을 알지만, 저는 제가 무엇을 잘못하고 있는지 알아내려고 하는 것에 좌절감을 느낄 뿐입니다.

저는 Visual Studio 2010을 사용하고 있으며 여기에 있는 모든 단계를 따릅니다. http://curl.haxx.se/libcurl/c/visual_studio.pdf

솔루션을 컴파일하려고 하면 다음 오류가 계속 발생합니다.

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 ==========

출처:

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

정적 버전의 libcurl을 사용하고 있으며, 프로그램을 제대로 연결하려면 다음과 같은 정의를 추가해야 했습니다.

CURL_정적LIB

내 프로젝트의 구성을 빌드합니다.

에▁defining를 정의하는 것 에도.CURL_STATICLIB과 같은했습니다.libcurl.lib또는libcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib

비슷한 문제가 발생했습니다. libcurl.lib의 64비트 위치를 참조하고 있었습니다.링크 디렉터리를 32비트 위치로 변경하고 프로젝트를 완벽하게 컴파일했습니다.

라이브러리가 연결되지 않은 것 같습니다.라이브러리 디렉터리가 libcurl dll에 대한 전체 경로를 포함하도록 설정되었는지 확인합니다.또한 이 라이브러리가 실제로 프로젝트에 추가되었는지 확인합니다.

저도 같은 문제가 있었습니다.저는 어떻게 마침내 컬립을 만들 수 있었는지를 여기에 썼습니다: http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/ 만약 당신이 보고 싶다면.행운을 빕니다.

VS2017 - x86 릴리스/디버그 - MFC 정적 라이브러리에서 작동했습니다.

프로젝트 속성을 열고 다음을 검토합니다.

  • C/C++ - 전처리기 - 전처리기 정의 - CURL_STATICLIB 추가

  • 링커 - 입력 - 추가 종속성 - 추가(CTRL+C)

ws2_32.lib

Normaliz.lib

Crypt32.lib

Wldap32.lib

libcurl_a.lib(디버깅 구성의 경우 libcurl_a_debug.lib)

  • C/C++ - 일반 - 추가 디렉터리 포함 - 헤더 파일에 포함 폴더 추가

많은 아이디어와 구성 후에 저는 다음과 같이 추가하여 문제를 해결했습니다.

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

libcurl_a.lib 및 curl lib 파일의 입니다.lib이를 포함하는 폴더입니다.

저도 같은 오류가 있었습니다. 문제는 이 SO 답변에 따라 cURL을 구축했다는 것입니다. /MT를 런타임 라이브러리 옵션으로 원할 경우에는 작동하지 않습니다.

/및 /하려면 /MT 및 /MTD 관 cURL 축 합 니 실행해야 .Set RTLIBCFG=static실제로 그것을 그것과 함께 짓기 전에.nmake명령을 사용할 수 있습니다.이러한 방식으로 cURL을 구축하는 전체 프로세스는 여기에서 확인할 수 있습니다.

편집: URL이 작동하지 않을 경우, 여기에 지침을 추가하겠습니다.

  • CURL 소스 코드를 다운로드하여 임시 디렉토리에 압축을 풉니다.http://curl.haxx.se/download.html, 튜토리얼에서 우리는 curl-7.37.0을 사용할 것입니다.
  • "Visual Studio 명령 프롬프트(2010)" 열기
  • Winbuilds 폴더를 찾습니다.\vii-7.37.0\winbuild.
  • 유형Set RTLIBCFG=static명령 프롬프트에 입력하고 Enter 키를 누릅니다.이렇게 하면 컴파일러가 /MT 및 /MTD용으로 빌드되도록 설정됩니다.
  • 유형nmake /f MakeFile.vc mode=static DEBUG=yes디버그 버전을 빌드하거나
  • 유형nmake /f MakeFile.vc mode=static DEBUG=no버전을 빌드할 수 있습니다.

저도 같은 오류가 있었습니다.문제는 제가 libcurl_a.lib를 32비트로 빌드하고 제 프로젝트는 64비트로 빌드한다는 것입니다.32비트 프롬프트 대신 64비트 호스팅된 개발자 명령 프롬프트를 사용해야 합니다.따라서 "VS->Tools->Developer Command Prompt"를 통해 여는 대신 Windows 시작 메뉴에서 "x64 Native Tools Command Prompt for VS 2022" 바로 가기를 사용해야 합니다.https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line?view=msvc-170 을 참조하십시오.

언급URL : https://stackoverflow.com/questions/4176503/unresolved-symbols-when-linking-a-program-using-libcurl

반응형