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

时间:2013-03-09 16:33:32

标签: c++ visual-studio visual-c++ dll reference

我正在尝试启动C ++游戏引擎项目。

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

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

  

错误LNK1104:无法打开文件'MyPath \ Renderer.lib'MyPath \ LINK   发动机

为什么提到libs?

4 个答案:

答案 0 :(得分:9)

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

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

  2. 仅包含链接器定义的库,此类库附带DLL

  3. 所以基本上你需要链接这个LIB文件才能使用DLL

答案 1 :(得分:3)

所以我整理了我的问题。因为他们是新项目,他们还没有实现任何方法,所以没有创建lib,所以没有什么可以引用给我的。

但最后一件事是,我无法为头文件定义dllimport / dllexport宏。我试图让它定义dllexport当它的导出项目,但说我的项目是2个名称,例如“真棒引擎”然后如何实现显然是自动创建的导出宏?我应该在这个空间使用下划线吗?

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

答案 2 :(得分:2)

通常,

图书馆可能会以两种模式为您提供API:

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

  • 静态:较大的可执行文件,但是独立。

首先,决定如何静态或动态地使用该库?!然后配置您的项目,编译器可以找到该库的头文件。 然后,如果有必要将LIB文件添加到您的项目中。

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

答案 3 :(得分:2)

  

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

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

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