无法引用库项目 (DLL),因为缺少 .lib 文件
Can't reference a library project (DLL) because .lib file is missing
我正在尝试启动一个c++游戏引擎项目。
我对dll和lib没有太多的了解,但我认为引擎本身就是一个dll,我会有单独的dll项目,如渲染器,输入等,这些将由引擎使用,引擎dll将由游戏使用。
我似乎在demo.exe项目中引用了引擎项目(通过添加引用并添加路径到其他包含目录),但当试图在引擎dll项目中添加对渲染器dll项目的引用时,我得到:
错误LNK1104:无法打开文件"MyPathRenderer"。自由的MyPath 链接引擎
为什么要提到lib ?
许多dll附带相应的LIB库,仅在链接阶段需要。所以基本上有两种类型的LIB库:
-
包含所有目标文件的真实静态库
-
只有链接器定义的库,这类库随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,或没有?
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- boost :: filesystem :: verver()无法访问文件,因为另一个过程正在使用该文件
- 编译 C++ 文件失败,因为找不到"ssize_t"的定义
- C++:无法移动文件,因为文件夹名称上有空格
- C++无法创建对象文件,因为需要资源
- 当我使用 std::map 从文件中读取值时,该值会随之",",因为键和值用逗号分隔
- 当我从 Windows 请求"Miriam"字体时,我得到的是"Arial"字体。这怎么可能,因为字体文件"mriam.ttf"存在于我的系统中?
- 如何引用要以C++打开的文件,因为其完整路径名将因计算机而异
- 记事本显示 Unicode 字符,因为文件是 ANSI
- c++应用程序找不到com dll,因为编译器使用不正确的guid生成.tlh文件
- 链接器输入文件未使用,因为链接尚未完成
- ostream打开文件失败,因为打开的文件太多
- g++.exe[警告]链接器输入文件未使用,因为链接未完成
- 无法引用库项目 (DLL),因为缺少 .lib 文件
- ifstream 失败,因为我的文件描述符用完了