我正在创建一个使用DLL的项目。要构建我的项目,我需要包含一个头文件和一个lib文件。为什么我需要包含相应的lib文件?头文件不是应该声明所有需要的信息,然后在运行时加载任何需要的库/dll吗?
谢谢
发布于 2011-08-05 21:37:56
不,头文件并不是必须的。头文件可以只包含函数和类的声明以及您需要的其他东西,而不是它们的实现。
这段代码之间有很大的不同:
void Multiply(int x, int y);这段代码是:
void Multiply(int x, int y)
{
return x * y;
}第一个是声明,第二个是定义或实现。通常第一个示例放在头文件中,第二个示例放在.CPP文件中(如果您正在创建库)。如果您在第一个头中包含了一个头,但没有链接任何内容,那么您的应用程序如何知道如何实现Multiply?
现在,如果您使用的头文件包含全部内联的代码,则不需要链接任何内容。但是,如果有一个方法没有内联,而是在编译成.lib文件的.CPP文件中实现,那么就需要在.lib文件中进行链接。
编辑通过使用Import Libraries,您将告诉链接器不要将导入的代码的实现详细信息包含到您的二进制文件中。相反,操作系统将在运行时将导入DLL加载到您的进程中。这将使您的应用程序更小,但您必须随附另一个DLL。如果库的实现发生变化,您只需向客户重新安装另一个DLL,而不必重新安装整个应用程序。
还有另一种选择,你可以只链接到一个库中,而不需要发布另一个DLL。该选项是链接器将实现包含到您的应用程序中的地方,使其更大。如果您必须更改导入库中的实现细节,则必须重新编译和重新链接整个应用程序,并将整个过程重新封装给您的客户。
https://stackoverflow.com/questions/6957061
复制相似问题