2013-03-09 62 views
7

我正在尝试启动C++游戏引擎项目。因为.lib文件丢失,无法引用库项目(DLL)

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

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

错误LNK1104:无法打开文件 'mypath中\ Renderer.lib' mypath中\ LINK 引擎

为什么提库?

+0

的可能重复[如何制作的.lib文件有一个.dll文件和一个头文件时(http://stackoverflow.com/questions/9360280/how-to-make-a-lib -file-and-a-header-file) – jww 2014-11-17 06:53:24

回答

2

一般来说,

库可能给你它的API有两种模式:

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

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

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

你的情况:检查你是否正确添加LIB文件到你的项目或生成文件,或不?

+0

我很高兴能够动态地做到这一点,这种方式如果我发布了一款游戏,它会随相应的dll的含义发布,让它更容易如果需要更新和修改。在这种情况下,我的Renderer dll项目没有创建一个lib文件,只有一个dll,ilk和pdb文件。我刚刚注意到,在我的渲染器的项目引用属性(在引擎属性的框架和引用选项卡下)下,它有一个链接库依赖项设置为true的选项时,它似乎构建,如果我将它设置为false,但这是否意味着很多? – EvilWeebl 2013-03-09 17:26:54

2

在DEMO.EXE项目中引用罚款(通过添加引用并添加路径附加包含目录)发动机项目

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

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

9

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

包含所有的目标文件

  • 图书馆只为连接器定义

    1. 真实静态库,这种库自带的DLL

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

  • +1

    我无法找到任何地方创建任何.lib文件。如果我将例如我想包含在我的引擎dll项目中的renderer dll项目。渲染器生成良好,并将* .dll,* .ilk和* .pdb输出到我的(解决方案)/ Debug文件夹中。另外,我的(解决方案)/ Renderer/Debug文件夹中有文件,例如* .obj。我应该在哪里链接?另外,当它最终成为一个安装项目时,我只需要dll或连接器呢? – EvilWeebl 2013-03-09 17:10:02

    +0

    在我的情况下,包含* .obj文件的文件夹也包含* .lib,但其他项目在其中找不到它... – 2013-12-03 17:48:27

    3

    所以我排序我的问题。由于他们是新项目,他们还没有实现方法,所以没有创建库,所以没有什么可以参考..silly我。

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

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

    右键单击项目,属性,配置属性,C/C++,预处理器。将'AWESOME_ENGINE_EXPORTS'(或任意选择的)添加到您的DLL的预处理器定义列表中。这使得在你的dll中定义宏,导致函数被导出。其他人都没有这个宏,所以函数将被导入。 – 2013-12-03 17:55:31

    相关问题