为什么dll不能在c ++中使用?

时间:2010-03-28 10:26:31

标签: c++ dll

这个答案指出:

Failed to link mysql5.1.39\bin\libmySQL.dll

但我不明白为什么,.dll基本上与.lib相同,只是不同进程只使用了它的一个副本。

它与IDE有什么关系吗?我正在使用visual c ++ 2008 express

更新

任何人都知道在Windows中将.dll转换为.lib的免费工具吗?

5 个答案:

答案 0 :(得分:5)

你错了两点。首先,DLL和LIB(静态库)是非常不同的野兽。您正在谈论的LIB(我认为)是导出库,它只是DLL中的名称列表。这个库通常在编译DLL时生成,如果DLL打算由其他开发人员链接,则随DLL一起提供。

要将DLL与现代IDE(我不使用VS)一起使用,通常在项目中包含匹配的.LIB(导出库)。在运行时,您必须确保DLL可用于您的程序 - 最简单的方法是将DLL放在与可执行文件相同的目录中。

其次,DLL可以与C ++一起使用。

答案 1 :(得分:0)

DLL是在运行时加载的特定Windows可执行文件。它们在Linux中的等价物是* .so。
如果你想了解DLL和静态库see here之间的区别。

答案 2 :(得分:0)

主要原因可能与dll文件是链接器的输出(link.exe)有关。这个命令行实用程序不知道如何读取dll,只知道如何编写它们。

实际上有时.lib文件包含的不仅仅是函数列表。例如,libpng.lib作为独立文件工作,没有任何dll文件。

答案 3 :(得分:0)

要在C / C ++中使用DLL,您需要链接所谓的 import lib 。这是一个小的.lib,它包含DLL以链接器理解的格式导出的名称/序数。链接后,生成的二进制文件将能够使用DLL。如果您没有相应的导入库,您的C / C ++编译器应该附带一个从DLL生成一个的工具。

答案 4 :(得分:0)

您可以使用以下类比来理解dll和lib文件之间的区别。

dll类似于源.cpp文件,而lib是标题.h文件。

虽然这不完全正确,但DLL保存可执行代码,而LIB文件告诉链接器如何将代码粘合在一起。

It is also possible (in some cases) to generate the lib from the dll。基本上,调用函数所需要知道的只是dll中的函数入口点,参数数量和每个参数的大小。发送相关信息是您自己的问题。