我正在尝试将libcurl用于使用CodeBlocks IDE的简单应用程序。在Codeblocks IDE中,单击Build Options ==>链接器设置==>链接库==> “添加”,文件浏览器只允许我在* .a,*。so,* .lib和* .dyl文件之间进行选择。为什么不允许我选择* .dll文件?我为libcurl下载了Windows的二进制包,它们都提供了.dll文件。这就是它的样子:
==== UPDATE ====
您好我现在已经为lib curl下载了以下zip文件 其中包括CURL源,DLL文件和.lib文件。有可能 在这里找到:http://www.confusedbycode.com/curl/curl-7.34.0-win64.zip
但是,我仍然无法编译我的源代码 代码
以下是我的源代码:
#include <iostream>
#include <stdio.h>
#include "curl/curl.h"
using namespace std;
int main()
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* 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);
}
return 0;
}
我不确定设置有什么问题。它正在建设中遇到麻烦。它返回以下错误消息:
以下是最新的构建日志:
-------------- Build: Debug in libcurl_c (compiler: GNU GCC Compiler)---------------
mingw32-gcc.exe -Wall -g -IC:\Users\bbb\Desktop\libcurl_packages\confused_by_code\curl-7.34.0-win64\curl-7.34.0-win64\include -c C:\Users\bbb\Desktop\workspace\libcurl_c\main.c -o obj\Debug\main.o
mingw32-g++.exe -o bin\Debug\libcurl_c.exe obj\Debug\main.o C:\Users\bbb\Desktop\libcurl_packages\confused_by_code\curl-7.34.0-win64\curl-7.34.0-win64\lib\libcurl.lib
obj\Debug\main.o: In function `main':
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:9: undefined reference to `_imp__curl_easy_init'
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:11: undefined reference to `_imp__curl_easy_setopt'
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:13: undefined reference to `_imp__curl_easy_setopt'
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:16: undefined reference to `_imp__curl_easy_perform'
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:19: undefined reference to `_imp__curl_easy_strerror'
C:/Users/bbb/Desktop/workspace/libcurl_c/main.c:23: undefined reference to `_imp__curl_easy_cleanup'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)
6 errors, 0 warnings (0 minutes, 1 seconds)
答案 0 :(得分:6)
程序在运行时搜索并加载DLL(动态链接库)。至
自动执行此操作,您不会链接.dll
本身(您不能)。您链接匹配的导入库,扩展名为.lib
。
libcurl.dll
的导入库是libcurl.lib
。如果您已将cURL
下载并解压缩到C:\develop\curl-7.34.0-win32
,那么您将在以下位置找到导入库
C:\develop\curl-7.34.0-win32\lib\libcurl.lib
。您应该将此文件添加到库中
为你的Code :: Blocks项目。
然后项目将链接(除非它有其他问题),但为了使其成功运行,它必须在运行时搜索DLL的其中一个位置找到libcurl.dll
。确保这一点的最简单方法是将libcurl.dll
的副本放在运行程序的目录中。否则你可以通过学习决定它的位置
Dynamic-Link Library Search Order
您可能难以找到要下载的正确二进制包
可用的过多here。一些
它们是cURL
命令行工具的包(你不想要的)
其中一些是开发二进制文件的包(你想要的)
适用于各种平台。访问http://www.confusedbycode.com/curl/并下载
curl-7.34.0-win32.zip
或curl-7.34.0-win64.zip
,具体取决于
是否定位win32
或win64
。提取存档和
在子目录lib
和dlls
中找到导入库和DLL,
分别
更新OP的进一步问题
您的程序是提供的示例simple.c
,并添加了C ++标头<iostream>
。
libcurl
项目,然后使用干净的C
项目(而不是C++
)重新开始。 simple.c
或其副本。不要将其设为.cpp
文件或以其他方式更改它。不要将任何其他文件添加到项目中。 libcurl.lib
的相对路径。include
目录的相对路径,而不是其他任何内容(不是include\curl
目录)。更新#2
现在的问题是您尝试将64位curl-7.34.0-win64\lib\libcurl.lib
与32位工具链mingw32
生成的32位目标代码链接起来。你不能这样做。
将curl-7.34.0-win64
的{{1}}安装替换为同一网站的curl-7.34.0-win32
。在您的项目中,将your\path\to\curl-7.34.0-win64\lib\libcurl.lib
替换为your\path\to\curl-7.34.0-win32\lib\libcurl.lib
,然后重试。该示例将进行编译和链接。
它也将正确运行,前提是它在运行时找到32位libcurl.dll
,同样依次由libcurl.dll
动态加载的32位DLL。出于示例的目的,只需将your\path\to\curl-7.34.0-win32\dlls
中的所有DLL复制到与.exe
相同的目录中。对于cURL
个应用程序的常规开发,您需要在系统上安装cURL
个库。
由于您首先选择下载64位cURL
,因此您可能希望构建64位
可执行文件(尽管32位可执行文件将在64位主机上运行)。你不能这样做
使用32位工具链mingw32
。您可以安装64位工具链,例如TDM-GCC MinGW Compiler,
并将其配置为C :: B中的附加工具链。或者你可以替换你的
从Sourceforge