2010-08-05 4 views
8

Microsoft Visual C++ 2010을 사용하고 있으며 libcurl dll을 필요로하지 않는 응용 프로그램을 만들어야합니다. 전 처리기 지시문에서 CURL_STATICLIB를 정의하고 libcurl.lib, libcurl_static.lib, ws2_32.lib 및 winmm.lib에 연결하지만 여전히 dll이 작동해야합니다. libcurl_static.lib 만 링크하면 정의되지 않은 외부 기호 오류가 있습니다. 어떻게 작동시킬 수 있습니까?dll없이 libcurl 사용

나는 소스를 만들려고했지만 "오류 C2011 : 'pollfd': 'struct'유형 재정의"라고하는 13 개의 오류 (와우, 불행한 숫자)가 발생합니다. 누군가 libcurl을 작동시키는 것을 도울 수 있습니까?

답변

11

간단한 대답은 없습니다. Libcurl은 다른 타사 라이브러리 (사용중인 이진 배포본에 따라 다름)에 의존합니다. DLL을 제거하면 해당 타사와 수동으로 연결해야합니다.

좋아, 첫 번째 요점은 libcurl.lib에 연결하지 않아야하므로 원치 않는 DLL에 연결된다는 것입니다.

두 번째 포인트 - libcurl_static.lib으로 링크 할 때 (위에서 언급 한 바와 같이) 의존하는 라이브러리와도 링크해야합니다. 이를 수행하는 간단한 방법은 다음과 같이하는 것입니다.

#if defined CURL_STATICLIB 

#if defined _DEBUG 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Debug\\curllib_static.lib") 
#else 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Release\\curllib_static.lib") 
#endif 

#pragma comment(lib, "ws2_32.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\libeay32.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\openldap.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\ssleay32.lib") 

#endif 

하지만이 방법을 사용하면 더 많은 3 가지 종속성을 얻을 수 있습니다. 또는 정적으로 연결하는 방법을 검색 할 수도 있지만 다른 이야기입니다. 또 다른 대안으로

- 당신은 당신이 이렇게 원치 않는 종속성을 제거하지 않아도 모든 기능을 비활성화 한 후에 소스에서 libcurl_static.lib 를 다시 수 (에 설명 된대로 파일 INSTALL의 "이는 Win32에서 특정 프로토콜을 비활성화하면 구축") .

마지막으로 libcurl은 원본에서 Windows 컴파일에 대한 지원이 상당히 부족하므로 curllib.dll을 없애는 아이디어를 다시 읽어 보시기 바랍니다.

1

libcurl 프로젝트의 전처리 지시문과 내 응용 프로그램에서 HTTP_ONLY와 CURL_STATICLIB를 모두 지정하여 컴파일하고 링크 할 libcurl의 정적 빌드를 얻었습니다. 이렇게하면 필요하지 않은 프로토콜에 필요한 모든 종속성이 제거됩니다. 이제 응용 프로그램은 DLL을 전혀 요구하지 않고 작동합니다.

위와 마찬가지로 libcurl.lib와 curl 포함 파일 경로가 응용 프로그램의 Visual Studio 프로젝트 설정에서 설정되었는지 확인해야했습니다.

참조 내가 사용 : (일자 아웃) Visual Studio에서 libcurl에 사용 http://curl.haxx.se/mail/lib-2011-12/0123.html

: Win32에서 특정 프로토콜을 사용하지

빌드 http://curl.haxx.se/libcurl/c/visual_studio.pdf