这是DLL的隐式链接和显式链接的最佳实践
Which is the best practice between implicit linking and explicit linking of DLL
我看到过隐式和显式链接. dll有许多不同的原因。我目前正在使用Visual Studio 2015和c++与SFML。
隐式:好的一面:您可以访问. dll头文件(.h)并知道它包含的函数。它更容易链接和使用。更不容易出错。似乎是最常用的做法。
:太差了绝对需要.lib, .h和.dll文件链接。
文件较多,占用较多磁盘空间。明确:好的一面:占用更少的磁盘空间,因为只需要。dll。
:太差了由于可能使用dll可能没有的函数以及正确加载它而容易出错。没有办法知道dll包含的函数,因为你没有头文件。
1:我听说明确链接是一种不好的做法。这是正确的吗?
2:我应该主要关注隐式链接吗?
3:显然,我对DLL的了解是最少的,关于链接DLL的隐式和显式方式,我没有看到更多的好和坏的方面吗?
4:既然我计划制作游戏,那么将精灵表放入dll中并使用指针加载纹理是否是个好做法?
您可以删除您的"占用更少的磁盘空间"点。*。Lib只需要在开发人员的机器上。在安装程序中,在这两种情况下只需要DLL。
-
这取决于用例。在某些情况下,显式链接(通常称为动态加载)是唯一的方法,例如当这些dll实现用户提供的插件时。
-
对于面向
儿童大量无经验用户的游戏或其他桌面应用,我建议根本不要使用dll。静态地链接所有代码。它不仅使你的应用程序更小(链接器会从那些你没有调用的库中抛出任何代码),这也会消除一类bug。这当然也适用于C运行库(msvcrt.dll)。
_4。我不会那么做的。从逻辑上讲,精灵表是数据,而不是代码。无论如何加载DLL(静态或动态),都不应该将它放在DLL中。相反,从文件加载该数据。如果你只是在加载游戏或关卡时才需要这些数据,那就使用ReadFile API。如果你在游戏运行时不断读取精灵表,你可以将完整的数据文件映射到进程的地址空间,参见CreateFileMapping和MapViewOfFile API(在内部,DLL加载使用这个方法)。请注意,32位应用程序的地址空间是有限的。
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 如何添加到链接列表中以获得最佳拟合管理或删除某些内容
- 如何使用返回的临时链接的最佳方式
- 这是DLL的隐式链接和显式链接的最佳实践
- 创建一个由链接平衡最佳表和双链表组成的数据结构