所以,我制作了一个dll并且编译得很好。 然后我引用了我在另一个项目中创建的这个dll并收到了此错误消息:
error C1083: Cannot open include file: 'openssl\ssl.h': No such file or directory
这个.h文件在dll中使用,我认为通过引用dll我不应该直接包含这个文件... 不应该有一个dll具有它所需的所有文件"在它里面"?
答案 0 :(得分:3)
dll是否应该拥有其所需的所有文件"在其内部"?
没有。 DLL包含机器代码。
.c
和.h
文件之间的主要区别在于.c
个文件包含代码,.h
个文件包含标题(即他们应该做的事情,尽管他们并没有受到约束)。您需要这些头文件,以便编译器知道DLL中要查找的内容。编译和链接程序后,不再需要头文件。
这就是为什么用C或C ++编写的非开源的库的作者通常会提供预编译的二进制文件和头文件。
包含机器代码和标题的文件格式是可能的,但据我所知,不存在这样的格式,如果确实存在,那将非常糟糕,因为很多程序都意味着巨大可执行文件。
答案 1 :(得分:2)
不,因为:
.dll
是一个已编译的二进制文件,可由.exe
程序在运行时 dynamically loaded。.h
(或.hpp
)文件包含源代码对C / C ++程序的函数原型或数据结构的定义,这些定义在编译期间使用 要编译源代码,您需要:
#include
头文件,以便其余代码知道DLL中存储的数据结构和函数签名是什么样的。.lib
文件等效的.a
或.dll
文件相关联。如果一切顺利,那么编译过程生成的.exe
文件将能够动态加载并使用存储在.dll
文件中的(已编译的)函数。