繁体   English   中英

为什么dll无法在C ++中使用?

[英]Why dll can't be used in c++?

该答案指出了这一点:

无法链接mysql5.1.39 \\ bin \\ libmySQL.dll

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

我在用Visual C ++ 2008 Express吗?

UPDATE

有谁知道免费的工具,可以将.dll转换为Windows中的.lib

你有两个错误。 首先,DLL和LIB(静态库)是完全不同的野兽。 您正在谈论的LIB(我认为)是导出库,它只是DLL中名称的列表。 该库通常在DLL编译时生成,并且如果DLL要与其他开发人员链接,则该库将与DLL一起提供。

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

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

DLL是在运行时加载的特定Windows可执行文件。 在Linux中,它们的等效值为* .so。
如果您想了解DLL和静态库之间的区别, 请参见此处

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

实际上,有时.lib文件包含多个函数列表。 例如,libpng.lib可以作为独立文件使用,而无需任何dll文件。

为了在C / C ++中使用DLL,您需要链接到所谓的import lib 这是一个小.lib,其中包含DLL导出的名称/顺序(链接程序可以理解的格式)。 链接完成后,生成的二进制文件将可以使用DLL。 如果您没有适当的导入库,则您的C / C ++编译器应附带一个从DLL中生成一个的工具。

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

dll就像源.cpp文件,而lib是标头.h文件。

尽管这不是完全正确,但DLL保留了可执行代码,而LIB文件告诉链接程序如何将代码粘合在一起。

也有可能(在某些情况下)从dll生成lib 基本上,您需要知道的所有调用函数的方法是dll中的函数入口点,参数数量和每个参数的大小。 这样,发送相关信息就是您自己的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM