无法从 DLL 打开包含文件
Cannot open include file from a DLL
所以,我制作了一个 dll,它编译得很好。
然后我引用了我在另一个项目中制作的这个dll并收到这个错误信息:
error C1083: Cannot open include file: 'openssl\ssl.h': No such file or directory
这个.h文件是在dll内部使用的,我认为通过引用dll我不应该直接包含这个文件...
一个 dll 不应该拥有其目的所需的所有文件 "inside it" 吗?
不,因为:
- 一个
.dll
是一个 编译的二进制 文件,可以 dynamically loaded 在 运行时 由 .exe
个程序。
- 一个
.h
(或 .hpp
)文件包含 源代码 函数原型或数据结构的定义 C/C++ 程序, 在编译. 期间使用
要编译您的源代码,您需要:
#include
头文件,以便您的其余代码知道存储在 DLL 中的数据结构和函数签名是什么样的。
- Link 与
.lib
或 .a
文件等同于 .dll
文件。
如果一切顺利,编译过程生成的.exe
文件将能够动态载入并使用存储在.dll
文件中的(已编译)函数。
Shouldn't a dll have all the files needed for it's purpose "inside it"?
没有。 DLL 包含机器代码。
.c
和 .h
文件之间的主要区别在于 .c
文件包含 Code 而 .h
文件包含 Headers(也就是说,这是他们应该做的,尽管他们没有义务这样做)。您需要那些 header 文件,以便编译器知道要在 DLL 中查找什么。编译和链接程序后,不再需要 header 文件。
这就是为什么用 C 或 C++ 编写的非开源库的作者通常会提供预编译的二进制文件以及 header 文件。
包含机器代码和 headers 的文件格式是可能的,但据我所知,不存在这样的格式,如果存在,那将是非常糟糕的,因为对于很多程序来说,意思是 巨大 个可执行文件。
所以,我制作了一个 dll,它编译得很好。 然后我引用了我在另一个项目中制作的这个dll并收到这个错误信息:
error C1083: Cannot open include file: 'openssl\ssl.h': No such file or directory
这个.h文件是在dll内部使用的,我认为通过引用dll我不应该直接包含这个文件... 一个 dll 不应该拥有其目的所需的所有文件 "inside it" 吗?
不,因为:
- 一个
.dll
是一个 编译的二进制 文件,可以 dynamically loaded 在 运行时 由.exe
个程序。 - 一个
.h
(或.hpp
)文件包含 源代码 函数原型或数据结构的定义 C/C++ 程序, 在编译. 期间使用
要编译您的源代码,您需要:
#include
头文件,以便您的其余代码知道存储在 DLL 中的数据结构和函数签名是什么样的。- Link 与
.lib
或.a
文件等同于.dll
文件。
如果一切顺利,编译过程生成的.exe
文件将能够动态载入并使用存储在.dll
文件中的(已编译)函数。
Shouldn't a dll have all the files needed for it's purpose "inside it"?
没有。 DLL 包含机器代码。
.c
和 .h
文件之间的主要区别在于 .c
文件包含 Code 而 .h
文件包含 Headers(也就是说,这是他们应该做的,尽管他们没有义务这样做)。您需要那些 header 文件,以便编译器知道要在 DLL 中查找什么。编译和链接程序后,不再需要 header 文件。
这就是为什么用 C 或 C++ 编写的非开源库的作者通常会提供预编译的二进制文件以及 header 文件。
包含机器代码和 headers 的文件格式是可能的,但据我所知,不存在这样的格式,如果存在,那将是非常糟糕的,因为对于很多程序来说,意思是 巨大 个可执行文件。