2008-12-15 130 views
2

我试图用我的程序使用dll,即libcurl,但它没有链接。 Libcurl附带.h文件,我可以包括(照顾dllimport),但我想我必须指定哪个dll实际使用时,以某种方式连接...我该怎么做?我与Borland C++ Builder的编译,但我真的想知道这些东西一般是如何工作的?从C++程序中使用dll。 (borland C++ builder和一般)

编辑: 这是代码(从卷曲主页直线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文件和链接路径包括它们。我仍然得到相同的错误。

回答

2

如前所述,您将需要与您通过IMPLIB运行 ,结果LIB文件添加到您的项目.dll文件变为静态的.lib文件。

如果你已经做到了这则:

  • 您可能需要使用stdcall调用。 您没有提及您使用的是哪个版本的Builder,但通常在项目选项 - 高级编译器 - 调用约定下,它通常在 之下。
  • 您可能需要启用MFC兼容性选项。
  • 它可能是一个名称mangling问题(项目选项 - C++兼容性选项)。
  • 或产生下划线或关闭

的libcurl似乎是C代码

  • 或高级连接器选项 “CASE_INSENSITIVE-联系”;但如果它是C++,请注意Microsoft和Borland类通常不兼容。应该有些技巧让他们工作,但这是一个真正的混乱,我从来没有取得成功。 C编码的DLL应该可以工作。

  • 1

    通常情况下,如果您要链接到Windows DLL,则需要将DLL或导入库的名称传递给链接器,否则将无法链接可执行文件。

    您引用的错误消息表明您确实需要指定DLL或导入库。当您将curl构建为DLL时,它可能会同时创建.lib和.dll文件。将链接器指向.lib文件,并在启动应用程序时,确保.dll文件位于路径中的目录中,以便加载程序可以找到它。

    +0

    添加的代码和错误的问题 – c0m4 2008-12-15 10:26:41

    +0

    我没有一个的.lib文件,我下载的libcurl预编译......我已经加入了路径的dll链接。仍然没有运气。 – c0m4 2008-12-15 10:48:30

    +0

    我会尝试自己建立图书馆。这可能是你正在使用的库是针对++使用的Microsoft链接并不一定需要导入库的Visual C。 – 2008-12-15 10:53:25

    1

    到目前为止,最常见的解决方案是使用导入库(.lib),您应该将它作为构建libcurl的一部分。这告诉(静态)链接器如何为动态加载准备EXE。

    +0

    .lib与.a相同吗?我所拥有的仅仅是.a文件,.dll文件和.h文件。 – c0m4 2008-12-15 10:39:36

    0

    您是否尝试将.h文件添加到您的项目中?

    +0

    是的,.h文件是有 – c0m4 2008-12-15 11:57:27

    2

    在构建器的bin或app目录中应该有一个名为IMPLIB.EXE的程序。对dll运行以创建一个.lib文件。

    编辑:Online Docs

    2

    使用“Depends.Exe”来浏览.DLL,并找到想要使用的函数的确切名称,然后为dll添加.lib文件(或使用borland的implib创建它),并包括通过右键单击并将其添加到项目中,在bpr项目文件中的.lib文件。然后在你的代码的顶部,使用__declspec(dllimport)来取悦链接神。