C++ Dll linking Curl

C++ Dll linking Curl

本文关键字:Curl linking Dll C++      更新时间:2023-10-16

我正在尝试创建一个使用curl库的非常简单的函数的dll。一切都很好,唯一的问题是,curl链接似乎不能正常工作。

我使用相同的链接,预处理器定义和包含目录,就像在我的可执行项目中,它工作得很好,所以我很确定它不是关于我的链接或库的二进制文件。

链接库到dll有什么特殊的属性吗?

我的最小示例代码:

c++ Mainfile:

#include "main.h" 
#include <Windows.h> 
#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Info.hpp>
#include <curlpp/Options.hpp>  
#include <curlpp/Exception.hpp>
namespace CurlDll 
{ 
    void CallHost::Try() 
    { 
        curlpp::Easy request;
        request.setOpt(new curlpp::options::UserAgent("Mozilla/4.0"));
        request.setOpt(new curlpp::options::AutoReferer(true));
        request.setOpt(new curlpp::options::FollowLocation(true));
        request.setOpt(new curlpp::options::Url("http://xml.utrace.de"));
        request.perform();
        MessageBox(0,"lololowwwwwwwwwwwl", "wqgqwwwwwgq", MB_OK |MB_ICONINFORMATION); 
    } 
}   
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason)
{return 1;}

头文件:

#ifdef MAIN_EXPORTS 
#define MAIN_API __declspec(dllexport) 
#else 
#define MAIN_API __declspec(dllimport) 
#endif 
#include <iostream> 

namespace CurlDll 
{ 
    class CallHost 
    { 
    public: 
        static MAIN_API void Try(); 
    }; 
}

我得到以下链接错误@drescherjm(我只发几张,我想这应该足够了)

ERROR 2 ERROR LNK2001: unresolved external Symbol"__imp__WSAStartup@8"。

ERROR 11 ERROR LNK2001: unresolved external Symbol"__imp__WSAGetLastError@0"。

ERROR 33 ERROR LNK2001: unresolved external Symbol"__imp__setsockopt@20"。

链接器错误告诉您链接器无法找到这些函数的定义:WSAStartup, WSAGetLastError, setsockopt。这些函数在导入库Ws2_32.lib中定义。您需要将该导入库提供给链接器。

这些信息在函数的文档中给出。例如,WSAStartup的文档。在文档主题的底部是一个列出需求的表格。注意所需的库Ws2_32.lib

符号WSAStartup, WSAGetLastError和setsocketopt是Ws2_32中Windows API的一部分。库(例如参见http://msdn.microsoft.com/en-gb/library/windows/desktop/ms742213(v=vs.85).aspx)

应该包含ws2_32。lib作为链接DLL时的附加库。如果你使用的是Visual Studio,很可能搜索路径已经找到了;把它作为一个额外的库。

所以实际上,我怀疑你没有使用与。exe 相同的链接器选项

如果你正在构建。exe或。dll,链接器需要确保它可以在链接时解析所有已知的符号。