无法将dll库导入CodeBlocks链接器

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

  1. 嗨,我现在已经下载了lib curl的以下zip文件,其中包括CURL源,DLL文件和.lib文件.它可以在这里找到:http://www.confusedbycode.com/curl/curl-7.34.0-win64.zip

    但是,我仍然有能力编译我的源代码的问题.

  2. 以下是我的源代码:

包括

#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)
  1. 下面是我的CodeBlocks IDE工作目录的屏幕截图:

在此输入图像描述

  1. 以下是我的链接器/编译器和链接器库的构建选项的屏幕截图:

在此输入图像描述

在此输入图像描述

在此输入图像描述

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

在此输入图像描述

以下是最新的构建日志:

-------------- 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)

Mik*_*han 7

程序在运行时搜索并加载DLL(动态链接库).要自动实现这一点,您不要链接.dll自身(您不能).您链接匹配的导入库,扩展名.lib.

导入库libcurl.dlllibcurl.lib.如果你已经下载并解压缩cURLC:\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.zipcurl-7.34.0-win64.zip根据您是否靶向,win32win64.解压压缩文件并找到子目录导入库和DLL libdlls分别.

更新OP的进一步问题

您的程序是提供的示例simple.c,添加了C++标头<iostream>.

  • 删除libcurl项目并使用干净的C项目重新开始(不是C++).
  • 仅向C项目添加1个源文件,示例simple.c或其副本.不要将其作为.cpp文件或以其他方式更改它.不要将任何其他文件添加到项目中.
  • 构建选项 - > 链接器设置 - > 链接库中,libcurl.lib像以前一样添加相对路径.
  • 构建选项 - > 搜索目录 - > 编译器(不是链接器)中,添加cURL include目录的相对路径,而不是其他任何内容(不是include\curl目录).
  • 不要在搜索目录 - > 链接器中放任何东西.
  • 建立项目.它为我编译和链接.

更新#2

现在的问题是你试图将64位curl-7.34.0-win64\lib\libcurl.lib与32位工具链生成的32位目标代码链接起来mingw32.你不能这样做.

更换你的安装curl-7.34.0-win64curl-7.34.0-win32来自同一站点.在您的项目中,替换your\path\to\curl-7.34.0-win64\lib\libcurl.libyour\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安装