在没有dll的情况下使用libcURL的正确方法是什么?

What's the proper way of using libcURL without the dlls?

本文关键字:方法 是什么 libcURL dll 情况下      更新时间:2023-10-16

最近成功地在一个测试程序中使用了libcurl来下载文件。代码是这样的:

  CURL * curl;
  FILE * fout;
  CURLcode result;
  char * url = "http://blablabla.com/blablabla.txt";
  char filename[FILENAME_MAX] = "blablabla.txt";
  curl = curl_easy_init();
  if (curl)
  {
    fout = fopen(filename,"wb");
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fout);
    result = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    fclose(fout);
  }

还有那些指令:

#define CURL_STATICLIB
#include <curl/curl.h>

我的问题是如何做到这一点,我不需要将它的所有dll与exec复制到同一目录中即可使其工作:

libcurl.dll
libeay32.dll
libidn-11.dll
librtmp.dll
libssh2.dll
libssl32.dll
zlib1.dll

在主页中找不到相关信息(http://curl.haxx.se)库的:|

你的意思是,"我如何静态链接libcurl"?

5.7在常见问题解答中说:

当构建使用静态libcurl库的应用程序时,必须将-DCURL_STATICLIB添加到CFLAGS中。否则,链接器将查找动态导入符号。如果您使用的是Visual Studio,则需要在"预处理器定义"部分添加CURL_STATICLIB

CURL *curl;
CURLcode res;
CString strUser;
FILE *ftplister;
m_FTPUserName.GetWindowTextW (strUser);
CT2CA PUF_File_HostName(PUF_FIle_Host);
CT2CA FTP_UserName(FTP_USERNAME);
FTP_PASSWORD.Append(L":");
FTP_PASSWORD.Append(FTP_USERNAME);
CT2CA FTP_Password(FTP_PASSWORD);
CT2CA FTP_AddressName(FTP_Address);
CString strLocalFile;
CString strFileName;
m_FTPFileName.GetWindowTextW(strFileName);
strLocalFile.Append(FTP_FileName);
strLocalFile.Append(L"\");
strLocalFile.Append(strFileName);
CT2CA PUF_LocalFile(strLocalFile);
//ofstream stream2(PUF_LocalFile);
curl = curl_easy_init();
if(curl)
{
    ftplister=fopen(PUF_LocalFile,"wb");
    curl_easy_setopt(curl,CURLOPT_URL,PUF_File_HostName);
    if(strUser!=_T(""))
    {
    curl_easy_setopt(curl,CURLOPT_USERPWD,FTP_Password);
    }
    curl_easy_setopt(curl, CURLOPT_FTP_SSL, TRUE);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, ftplister);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    fclose(ftplister);
}