我正在尝试在我的程序中使用一个 dll,即 libcurl,但是,它没有链接。 Libcurl 带有我可以包含的 .h 文件(处理 dllimport),但是我想我必须指定在以某种方式链接时实际使用哪个 dll ...我该怎么做?我正在使用 Borland C++ builder 进行编译,但我真的很想知道这些东西通常是如何工作的...
编辑: 这是代码(来自 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 文件,并将它们包含在链接器路径中。我仍然遇到同样的错误。
最佳答案
如前所述,您将需要与您运行的 .dll 一起使用的静态 .lib 文件 通过 implib 并将结果 lib 文件添加到您的项目中。
如果你这样做了,那么:
- 您可能需要使用 stdcall 调用约定。 您没有提到您使用的是哪个版本的 Builder,但是 它通常在项目选项 - 高级编译器 - 调用约定下。
- 您可能需要启用 MFC 兼容性选项。
- 这可能是名称修改问题(项目选项 - C++ 兼容性选项)。
- 或者生成下划线
- 或打开或关闭高级链接器选项“Case_insensitive-link”
libcurl 似乎是 C 代码;但如果是C++,注意微软和Borland类一般不兼容。应该有让他们工作的技巧,但处理起来真是一团糟,我从来没有成功过。 C 编码的 DLL 应该可以工作。
关于c++ - 使用来自 C++ 程序的 dll。 (borland c++ builder 和一般),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367926/