C++ 将dll库导入代码块链接器时出现问题

C++ 将dll库导入代码块链接器时出现问题,c++,dll,linker,codeblocks,C++,Dll,Linker,Codeblocks,我正在尝试将libcurl用于一个使用代码块IDE的简单应用程序。在Codeblocks IDE中,单击构建选项==>链接器设置==>链接库==>“添加”后,文件浏览器仅允许我在*.a、*.so、*.lib和*.dyl文件之间进行选择。为什么它不允许我选择*.dll文件?我下载了用于Windows for libcurl的二进制软件包,它们都提供.dll文件。这就是它看起来的样子: ==更新==== 嗨,我现在下载了lib curl的以下zip文件 其中包括CURL源代码、DLL文件和.lib

我正在尝试将libcurl用于一个使用代码块IDE的简单应用程序。在Codeblocks IDE中,单击构建选项==>链接器设置==>链接库==>“添加”后,文件浏览器仅允许我在*.a、*.so、*.lib和*.dyl文件之间进行选择。为什么它不允许我选择*.dll文件?我下载了用于Windows for libcurl的二进制软件包,它们都提供.dll文件。这就是它看起来的样子:

==更新====

  • 嗨,我现在下载了lib curl的以下zip文件 其中包括CURL源代码、DLL文件和.lib文件。可能是 可在此处找到:

    然而,我仍然有问题,无法编译我的源代码 代码

  • 下面是我的源代码:

  • 包括 程序在运行时搜索并加载DLL(动态链接库)。到 如果要自动执行此操作,则不链接
    .dll
    本身(不能)。使用扩展名
    .lib
    链接匹配的导入库

    libcurl.dll
    的导入库是
    libcurl.lib
    。如果您已经下载并提取了
    cURL
    ,例如,到
    C:\develope\cURL-7.34.0-win32
    ,那么您将在以下位置找到导入库:
    C:\develope\curl-7.34.0-win32\lib\libcurl.lib
    。您应该将此文件添加到库中 对于您的代码::Blocks项目

    然后,项目将链接(除非有其他问题),但为了成功运行,它必须在运行时搜索dll的位置之一找到
    libcurl.dll
    。确保这一点的最简单方法是将
    libcurl.dll
    的副本放在程序运行的目录中。否则你可以通过研究来决定它的位置

    您可能很难找到要从中下载的正确二进制软件包 有太多的可供选择。一些 其中包括
    cURL
    commandline工具包(您不需要) 其中一些是开发二进制文件包(您确实需要) 适用于各种平台。浏览及下载
    curl-7.34.0-win32.zip
    curl-7.34.0-win64.zip
    ,具体取决于 无论您的目标是
    win32
    还是
    win64
    。提取归档文件并 在子目录
    lib
    dlls
    中查找导入库和DLL, 分别

    OP后续问题更新

    <>你的程序是提供的例子:代码>简单。C < /C> >加上C++头,<代码> < /代码> ./P>
    • 删除您的
      libcurl
      项目,然后重新开始一个干净的
      C
      项目(而不是
      C++
    • 只向C项目添加一个源文件,例如
      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-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\libcurl.lib
    ,然后重试。该示例将编译并链接

    如果它在运行时找到32位
    libcurl.dll
    ,同样地,它也会正确运行,并且依次找到由
    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位工具链,例如, 并将其配置为C::B中的附加工具链
    使用C::B 13.12安装C::B 13.12,该C::B 13.12预先配置了TDM-GCC,来自Hi Mike。谢谢你的评论。我在C++中使用库是很新的。我遇到的问题是,我似乎找不到这些库文件中的任何一个。我在这里下载了几个“软件包”:。我下载了win32_cygwin、win32_generic、win64_cygwin、win64_generic、win64_mingw64并提取了所有这些文件,在每个文件中,我看到的都是.exe文件,除了win64_mingw64(它有libcurl.dll和libeay32.dll)。但是,在所有这些文件中,我都没有看到.lib文件。我应该从那个页面下载“源文件”吗?嗨,迈克。我已经更新了我的原始帖子,添加了我的源代码,显示了codeblocks目录结构和我的构建选项链接器/编译器设置。我在构建示例源代码时仍然遇到问题。你知道设置有什么问题吗?嗨,迈克。谢谢你的更新。我不知道发生了什么事。我一步一步地遵照你的指示。
    #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)