我正在尝试将dll(即libcurl)与我的程序一起使用,但是,它不是链接。 Libcurl带有我可以包含的.h文件(照顾dllimport),但是我想我必须指定在链接时实际使用哪个dll ...我该怎么做?我正在使用Borland C ++构建器进行编译,但我真的想知道这些东西是如何工作的......
编辑: 这是代码(来自curl主页的直接c / p)
bool FTPGetFile::ConnectToFTP(string ftpServer){
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
res = curl_easy_perform(curl);
return true;
}else{
return false;
}
}
以下是错误:
[Linker Error] Error: Unresolved external '_curl_easy_init' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ [Linker Error] Error: Unresolved external '_curl_easy_setopt' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ [Linker Error] Error: Unresolved external '_curl_easy_perform' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ
编辑2:根据joe_muc的建议,我使用implib工具制作了lib文件,并将它们包含在链接器路径中。我仍然得到同样的错误。
答案 0 :(得分:2)
在构建器的bin或app目录中应该有一个名为IMPLIB.EXE的程序。对dll运行该命令以创建.lib文件。
编辑:Online Docs
答案 1 :(得分:2)
如上所述,您将需要与您运行的.dll一起使用的静态.lib文件 通过implib并将结果库文件添加到项目中。
如果您已经这样做了:
libcurl似乎是C代码;但如果它是C ++,请注意Microsoft和Borland类通常不兼容。应该有一些技巧让他们工作,但这是一个真正的混乱处理,我从来没有成功。 C编码的DLL应该可以工作。
答案 2 :(得分:2)
使用“Depends.Exe”浏览.DLL,找到要使用的函数的确切名称,然后为dll添加.lib文件(或使用borland的implib创建它),并包含通过右键单击并将其添加到项目中的.bib项目文件中的.lib文件。然后在代码的顶部,使用__declspec(dllimport)来取悦链接器神。
答案 3 :(得分:1)
通常,如果要链接Windows DLL,则需要将DLL或导入库的名称传递给链接器,否则将无法链接可执行文件。
您引用的错误消息表明您确实需要指定DLL或导入库。当您将curl构建为DLL时,它可能同时创建了.lib和.dll文件。将链接器指向.lib文件,并在启动应用程序时,确保.dll文件位于路径中的目录中,以便加载程序可以找到它。
答案 4 :(得分:1)
到目前为止,最常见的解决方案是使用导入库(.lib)作为构建libcurl的一部分。这告诉(静态)链接器如何为动态加载准备EXE。
答案 5 :(得分:0)
您是否尝试过将.h文件添加到项目中?