无法引用库项目 (DLL),因为缺少 .lib 文件

Can't reference a library project (DLL) because .lib file is missing

本文关键字:因为 文件 lib DLL 引用 项目      更新时间:2023-10-16

我正在尝试启动一个c++游戏引擎项目。

我对dll和lib没有太多的了解,但我认为引擎本身就是一个dll,我会有单独的dll项目,如渲染器,输入等,这些将由引擎使用,引擎dll将由游戏使用。

我似乎在demo.exe项目中引用了引擎项目(通过添加引用并添加路径到其他包含目录),但当试图在引擎dll项目中添加对渲染器dll项目的引用时,我得到:

错误LNK1104:无法打开文件"MyPathRenderer"。自由的MyPath 链接引擎

为什么要提到lib ?

许多dll附带相应的LIB库,仅在链接阶段需要。所以基本上有两种类型的LIB库:

  1. 包含所有目标文件的真实静态库

  2. 只有链接器定义的库,这类库随dll一起出现

所以基本上你需要链接这个LIB文件以便能够使用DLL

所以我整理了我的问题。因为它们是新项目,它们还没有实现方法,所以没有创建lib,所以没有什么可参考的…我真傻。

最后一件事,我在为头文件定义dllimport/dllexport宏时遇到了麻烦。我试图让它定义dlexport时,它的出口项目,但说我的项目是2个名字,例如"棒极了的引擎",那么我如何实现出口宏显然是自动创建的?我应该在空格中使用下划线吗?

#ifdef AWESOME_ENGINE_EXPORTS // Or AWESOMEENGINE_EXPORTS?
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif

在demo.exe项目中引用的引擎项目(通过添加引用并添加路径到其他包含目录)

一些库可以静态链接,这意味着你只需要头文件(.h/.hpp)和.lib文件。其他库可能需要动态链接,这将导致您的程序依赖于某些DLL文件,但通常您需要有头文件来了解这些DLL中的内容。有时,这似乎是你的情况,你需要所有这些:头文件,静态库和dll。

头文件包含声明,它们定义了你的类的结构,它们声明了你的函数的原型,等等。静态库 (.lib文件)是二进制文件,它包含了你的函数,变量等的定义,需要在编译时解决,所以当它们丢失时,链接器会抱怨。动态链接库 (dll)也是二进制文件,但它们是在运行时解析的,这意味着真正需要它们的时候是在运行程序的时候。

一般来说,

库可能以两种模式给你它的api:

  • 动态:较小的可执行文件,但需要dll。

  • Static:较大的可执行文件,但是是独立的

首先,决定你想如何使用这个库,静态的还是动态的?然后配置您的项目,使编译器能够找到该库的头文件。然后,如果有必要,将LIB文件添加到项目中。

在您的情况下:检查您是否正确添加LIB文件到您的项目或makefile,或没有?