cod*_*ark 1 c++ dll linker codeblocks
我正在尝试使用libcurl作为使用CodeBlocks IDE的简单应用程序.在Codeblocks IDE中,单击Build Options ==> Linker Settings ==> Link Libraries ==>"Add"后,文件浏览器只允许我在*.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;
}
Run Code Online (Sandbox Code Playgroud)




我不确定设置有什么问题.它正在建设中遇到麻烦.它返回以下错误消息:

以下是最新的构建日志:
-------------- 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)
Run Code Online (Sandbox Code Playgroud)
程序在运行时搜索并加载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项目的库中.
然后项目将链接(除非它有其他问题),但为了使其成功运行,它必须libcurl.dll在运行时搜索DLL的其中一个位置找到.确保这一点的最简单方法是将一个副本libcurl.dll放在运行程序的目录中.否则,您可以通过研究动态链接库搜索顺序来确定它的位置
您可能很难找到合适的二进制包来从这里提供的过多内容中下载.其中一些是cURL命令行工具的包(你不想要的),其中一些是各种平台的开发二进制包(你想要的).访问http://www.confusedbycode.com/curl/,并下载curl-7.34.0-win32.zip或curl-7.34.0-win64.zip根据您是否靶向,win32或win64.解压压缩文件并找到子目录导入库和DLL lib和dlls分别.
更新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位工具链生成的32位目标代码链接起来mingw32.你不能这样做.
更换你的安装curl-7.34.0-win64与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并重试.该示例将编译和链接.
它也将正确运行,只要它libcurl.dll在运行时找到32位,并且同样是libcurl.dll依次动态加载的32位DLL .出于示例的目的,只需将所有DLL复制到与之your\path\to\curl-7.34.0-win32\dlls相同的目录中.exe.对于cURL应用程序的常规开发,您需要在cURL系统上安装库.
由于您首先选择下载64位cURL,因此您可能希望构建64位可执行文件(尽管32位可执行文件将在64位主机上运行).使用32位工具链,你无法做到这一点mingw32.您可以安装64位工具链,例如TDM-GCC MinGW编译器,并将其配置为C :: B中的附加工具链.或者,你可以用来自Sourceforge的预先配置了TDM-GCC的C :: B 13.12替换你的C :: B安装
| 归档时间: |
|
| 查看次数: |
16482 次 |
| 最近记录: |