无法将dll库导入CodeBlocks链接器

时间:2014-01-28 00:56:35

标签: c++ dll linker codeblocks

我正在尝试将libcurl用于使用CodeBlocks IDE的简单应用程序。在Codeblocks IDE中,单击Build Options ==>链接器设置==>链接库==> “添加”,文件浏览器只允许我在* .a,*。so,* .lib和* .dyl文件之间进行选择。为什么不允许我选择* .dll文件?我为libcurl下载了Windows的二进制包,它们都提供了.dll文件。这就是它的样子:

enter image description here

==== UPDATE ====

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

    但是,我仍然无法编译我的源代码 代码

  2. 以下是我的源代码:

  3. 包括

    #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;
    }
    
    1. 下面是我的CodeBlocks IDE工作目录的屏幕截图:
    2. enter image description here

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

        enter image description here

        enter image description here

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

        enter image description here

        以下是最新的构建日志:

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

1 个答案:

答案 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.zipcurl-7.34.0-win64.zip,具体取决于 是否定位win32win64。提取存档和 在子目录libdlls中找到导入库和DLL, 分别

更新OP的进一步问题

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

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

更新#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

预先配置了C :: B 13.12的C :: B安装