이 간단한 C++ 코드가 있습니다.C++ 링커는 정적 libcurl로 외부 기호를 사용할 수 없습니다.
#include <iostream>
#include <windows.h>
#include <Lmcons.h>
#define CURL_STATICLIB
#include <iostream>
#include <fstream>
#include <curl.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "curl\\libeay32.lib")
#pragma comment(lib, "curl\\openldap.lib")
#pragma comment(lib, "curl\\ssleay32.lib")
#if defined _DEBUG
#pragma comment(lib, "curl\\lib\\Debug\\curllib_static.lib")
#else
#pragma comment(lib, "curl\\lib\\Release\\curllib_static.lib")
#endif
using namespace std;
int main()
{
TCHAR name [ UNLEN + 1 ];
DWORD size = UNLEN + 1;
if (GetUserName((TCHAR*)name, &size))
wcout << "Hello, " << name << "!\n";
else
wcout << "Hello, unnamed person!\n";
CURL *curl;
CURLcode res;
curl_version();
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
/* First set the URL that is about to receive our POST. This URL can
just as well be a https:// URL if that is what should receive the
data. */
curl_easy_setopt(curl, CURLOPT_URL, "http://requestb.in/19l9fjg1");
/* Now specify the POST data */
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
curl_global_cleanup();
system("PAUSE");
return 0;
}
내 디렉토리 트리.
X
| app.cpp
|
+---curl
| | CHANGES
| | curl.exe
| | curllib.dll
| | libcurl_imp.lib
| | libeay32.dll
| | libeay32.lib
| | openldap.dll
| | openldap.lib
| | README
| | ssleay32.dll
| | ssleay32.lib
| |
| +---docs
| | | BINDINGS
| | | [...]
| | | VERSIONS
| | |
| | +---examples
| | | 10-at-a-time.c
| | | [...]
| | | threaded-ssl.c
| | |
| | \---libcurl
| | ABI
| | [...]
| | Makefile.in
| |
| +---include
| | | Makefile.am
| | | [...]
| | | README
| | |
| | \---curl
| | curl.h
| | [...]
| | types.h
| |
| +---lib
| | +---Debug
| | | curllib.dll
| | | curllib.lib
| | | curllib_static.lib
| | |
| | \---Release
| | curllib.dll
| | curllib.lib
| | curllib_static.lib
| |
| \---src
| +---DLL-Debug
| | curl.exe
| | curllib.dll
| | openldap.dll
| |
| +---DLL-Release
| | curl.exe
| | curllib.dll
| | openldap.dll
| |
| +---LIB-Debug
| | curl.exe
| |
| \---LIB-Release
| curl.exe
|
+---Debug
| app.obj
| [...]
| vc110.pdb
|
\---Release
app.obj
[...]
vc110.pdb
내 설정입니다.
Linker -> General -> Additional library directories
X\curl\lib\Release;X\curl;%(AdditionalLibraryDirectories)
Linker -> Input -> Additional dependences
$(ProjectDir)curl\lib\Debug\curllib_static.lib;%(AdditionalDependencies)
VC++-Directories -> Include directories
$(ProjectDir)curl\include\curl;$(IncludePath)
VC++-Directories -> Library directories
$(ProjectDir)curl\lib\Release;$(LibraryPath)
** $ (PROJECTDIR)는 X **
오류입니다. 내가 libcurl.dll이 누락하는 오류를 얻을 것보다
Error 2 error LNK2005: _calloc already defined in LIBCMT.lib(calloc.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 3 error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 4 error LNK2005: _free already defined in LIBCMT.lib(free.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 5 error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 6 error LNK2005: _strrchr already defined in LIBCMT.lib(strrchr.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 7 error LNK2005: _strchr already defined in LIBCMT.lib(strchr.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 8 error LNK2005: _fwrite already defined in LIBCMT.lib(fwrite.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 9 error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 10 error LNK2005: _strtoul already defined in LIBCMT.lib(strtol.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 11 error LNK2005: _memmove already defined in LIBCMT.lib(memmove.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 12 error LNK2005: _tolower already defined in LIBCMT.lib(tolower.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 13 error LNK2005: _atoi already defined in LIBCMT.lib(atox.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 14 error LNK2005: _isxdigit already defined in LIBCMT.lib(_ctype.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 15 error LNK2005: _isdigit already defined in LIBCMT.lib(_ctype.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 16 error LNK2005: _isspace already defined in LIBCMT.lib(_ctype.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 17 error LNK2005: __strtoi64 already defined in LIBCMT.lib(strtoq.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 18 error LNK2005: _memchr already defined in LIBCMT.lib(memchr.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 19 error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 20 error LNK2005: _strtol already defined in LIBCMT.lib(strtol.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 21 error LNK2005: _sprintf already defined in LIBCMT.lib(sprintf.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 22 error LNK2005: _fflush already defined in LIBCMT.lib(fflush.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 23 error LNK2005: __errno already defined in LIBCMT.lib(dosmap.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 24 error LNK2005: __lseeki64 already defined in LIBCMT.lib(lseeki64.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 25 error LNK2005: _getenv already defined in LIBCMT.lib(getenv.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 26 error LNK2005: _isalnum already defined in LIBCMT.lib(_ctype.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 27 error LNK2005: _isalpha already defined in LIBCMT.lib(_ctype.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 28 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj). X\MSVCRT.lib(ti_inst.obj) X
Error 29 error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj). X\MSVCRT.lib(ti_inst.obj) X
Error 30 error LNK2005: __strdup already defined in LIBCMT.lib(strdup.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 31 error LNK2005: __close already defined in LIBCMT.lib(close.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 32 error LNK2005: __fileno already defined in LIBCMT.lib(fileno.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 33 error LNK2005: __read already defined in LIBCMT.lib(read.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 34 error LNK2005: __strnicmp already defined in LIBCMT.lib(strnicmp.obj). X\MSVCRT.lib(MSVCR110.dll) X
Error 35 error LNK1169: One or more multiply defined symbols found in. X\..\Release\X.exe X
은 내가 curllib.lib
으로 curllib_static.lib
를 교체하십시오.
왜냐하면 나는 내 libcurl.dll에 libcurl을 사용하고 있지 않기 때문에.
어떻게 해결할 수 있습니까?
이 같은 2012 년 http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip
관련 항목 : http://stackoverflow.com/questions/3411259/using-libcurl-without-dll –
@SHR : 몇 초 전에 오류를 추가했습니다. 그리고 결국 네임 스페이스를 사용하려고했지만 같은 오류가 발생했습니다. – PatrickB
@AdrianoRepetti : 작동하지 않습니다. 위의 app.cpp에 대한 코드를 업데이트했습니다. – PatrickB