相关疑难解决方法(0)

.dll和.exe之间的区别?

我想知道dll和exe文件之间的确切区别.

windows dll exe

86
推荐指数
7
解决办法
9万
查看次数

导入库如何工作?细节?

我知道这对极客来说似乎很基础.但我想说清楚.

当我想使用Win32 DLL时,通常我只需要调用像LoadLibrary()和GetProcAdderss()这样的API.但最近,我正在使用DirectX9进行开发,我需要添加d3d9.lib,d3dx9.lib等文件.

我听说LIB用于静态链接,DLL用于动态链接.

所以我目前的理解是LIB包含方法的实现,并在链接时静态链接作为最终EXE文件的一部分.虽然DLL在运行时动态加载,但不是最终EXE文件的一部分.

但有时候,DLL文件会附带一些LIB 文件,因此:

  • 这些LIB文件是什么?
  • 他们如何实现他们的意图?
  • 有没有工具可以让我检查这些LIB文件的内部?

更新1

检查维基百科后,我记得这些LIB文件称为导入库.但我想知道它如何与我的主应用程序和动态加载的DLL一起工作.

更新2

正如RBerteig所说,LIB文件中存在一些与DLL一起出现的存根代码.所以调用序列应该是这样的:

我的主要应用 - > LIB中的stub - >真正的目标DLL

那么这些LIB应包含哪些信息?我能想到以下几点:

  • LIB文件应包含相应DLL的完整路径; 因此DLL可以由运行时加载.
  • 每个DLL导出方法的入口点的相对地址(或文件偏移量?)应该在存根中编码; 因此可以进行正确的跳转/方法调用.

我对吗?还有什么吗?

顺便说一句:有没有可以检查导入库的工具?如果我能看到它,就不会再有疑惑了.

c c++ windows visual-c++

76
推荐指数
2
解决办法
3万
查看次数

为什么游戏引擎比动态链接库更喜欢静态库

我一直在读几本游戏书.他们总是喜欢通过动态链接创建引擎作为静态库.我是c ++的新手,所以当谈到静态库和动态链接库时,我并不是很了解.我所知道的是静态库增加了程序的大小,在你的程序中需要加载DLL链接库.

[编辑]

我玩游戏几乎看起来他们使用DLL来加载声音,灯光,而不是单独加载.当水平加载.因为你在游戏菜单中不一定需要它.

c c++ visual-studio-2008 visual-c++

19
推荐指数
2
解决办法
7197
查看次数

静态链接图书馆的利弊是什么?

我想发布一个我开发的应用程序,作为Linux和Windows的业余爱好.此应用程序依赖于boost(以及可能的其他库).这种应用程序(国际象棋引擎)的规范是仅提供可执行文件和可能的一些帮助文件.

我认为静态链接库是个好主意,因此可执行文件不会有任何依赖.因此,最终用户可以将可执行文件放在目录中并开始使用它.

然而,在网上进行一些研究时,我发现了一些关于静态链接库的负面评论,有些甚至认为具有静态链接库的应用程序几乎不可移植,这意味着它只能在我的高度相似系统的系统上运行.

那么静态链接库的优点和缺点是什么?

我已经知道可执行文件会更大.但我不明白为什么它会使我的应用程序不那么便携.

linux linker static-libraries static-linking

11
推荐指数
1
解决办法
2852
查看次数

轻松地将许多重要的“静态库项目”重构为“ dll项目”

我有6个静态库项目:-

- Math
- ECS             : depends on Math
- Utility         : depends on ECS
- Physics         : depends on Utility         
- Graphics        : depends on Utility     
- BaseGame        : depends on Physics and Graphics         
- Some game (.exe): depends on BaseGame      
(The "depends" here is transitive e.g. BaseGame also depends on ECS.)    
Run Code Online (Sandbox Code Playgroud)

我通过“静态库”技术成功使用了6个项目。

今天,我听说动态库可以减少编译时间(我们不讨论这是否成立),
因此我阅读了以下链接,并成功创建了一个小演示。

这是我的测试演示中的一些代码:

#ifdef SomeName1_EXPORTS
#define SomeMacro1 __declspec(dllexport) 
#else
#define SomeMacro1 __declspec(dllimport) 
#endif
SomeMacro1 void someFunction(int someParam);
Run Code Online (Sandbox Code Playgroud)

现在,是将其应用于我的实际项目的激动人心的时刻。 …

c++ dll visual-studio c++17 visual-studio-2017

9
推荐指数
1
解决办法
223
查看次数

减少GSL库的文件大小

有没有办法减少已编译的GSL库的文件大小?

我可以编译一些子库吗?

c++ math gsl

7
推荐指数
1
解决办法
260
查看次数

使用DLL有什么优缺点?

Windows仍然使用DLL和Mac程序似乎根本不使用DLL.使用这两种技术有利有弊吗?

如果程序安装包含它需要的所有DLL,那么它将100%正常工作,它是否与静态链接所有库相同?

dll shared-libraries

6
推荐指数
1
解决办法
6637
查看次数

创建C ++ API库

我试图了解为非开放源代码项目提供相当大的C ++ API的正确方法或正确方法。我不想提供“仅标头”库,因为代码库很大,并且打算封闭源代码。目标如下:

  • 提供本机C ++ API,用户可以实例化C ++类,在C ++中传递数据,而无需C-only包装器
  • 允许方法作为参数并返回C ++对象,尤其是STL类型(std :: string,std :: vector等)
  • 没有自定义分配器
  • 大多数行业标准/规范方法可以做到这一点,如果存在这样的标准
  • 无需重新创建COM或使用MS COM
  • 假设所有C ++编译器至少符合“ C ++ 11”标准

我的目标是Windows以及其他平台(Linux)。

我的理解是由于DLL边界问题,无法创建DLL或共享库。为了解决DLL边界问题,必须使用动态链接的运行时(以及Windows上的正确版本,多线程/调试/等)编译DLL和调用代码,然后所有调试器设置都必须与调试符号相匹配(迭代器调试设置等)。我有一个问题是,例如,如果在Windows上使用Visual Studio中的默认“调试”和“发布”设置来确保编译器设置在/ MD方面匹配,那么我们是否真的可以“安全”使用DLL是否以这种方式(即来回传递STL对象,以及在发生不匹配时肯定会造成危险/失败的各种事物)?做共享对象,*。

使用静态库是否可以解决此问题?静态库和链接到该库的调用代码之间需要多少匹配编译器设置?与DLL(在Windows上)几乎一样的问题吗?

我尝试过在线查找图书馆的示例,但在此方面找不到太多指导。许多资源都在讨论开放源代码解决方案,该解决方案似乎是将标头和实现文件复制到代码库中(仅用于非标头),不适用于封闭源代码。

什么是正确的方法?看来这应该是一个普遍的问题;尽管我想知道大多数商业供应商是否仅使用C接口。

如果可以解决问题,我可以使用静态库。我还可以接受这样的想法:拥有一组具有Y设置变体的X编译器(其中X和Y是要支持的预定选项列表),并拥有一个生成X * Y共享二进制库的构建系统,如果那样的话是“安全的”。

答案是否真的只是与工厂一起执行C接口或创建Pure Abstract接口?(如果是这样,是否有规范的书籍或指南用于编写此文档,但未实现Microsoft COM?)。

我知道Stefanus DuToit的沙漏图案:https//www.youtube.com/watch? v = PVYdHDm0q6Y

我担心这是很多代码重复。

我并不是在抱怨事物的状态,我只是想了解“正确”的方式,希望对其他处于类似位置的人来说,这是一个很好的问题。

我已经查看了这些Stackoverflow参考:

何时使用动态库与静态库

如何安全地将对象(尤其是STL对象)与DLL传递?

分发Windows C ++库:如何决定创建静态库还是动态库?

静态库API问题(std :: string与char *)

简单的方法来保证C ++库和C链接的二进制兼容性?

也有评论:

https://www.acodersjourney.com/cplusplus-static-vs-dynamic-libraries/

https://blogs.msmvps.com/gdicanio/2016/07/11/the-perils-of-c-interface-dlls/

c++ api-design dynamic-linking static-linking

6
推荐指数
1
解决办法
491
查看次数

C++跨平台MP3解码器?

我搜索了高低,找不到任何体面的MP3解码器= /

我需要一个可以在gcc/linux下编译的程序.

我能找到的最接近的东西是libmad,它根本没有文档,我能找到的唯一例子是它们主页上的那个,这真的很复杂.

有谁知道我在哪里找到一个?

c++ mp3 gcc decoder

5
推荐指数
1
解决办法
6930
查看次数

Clion C++ 可执行文件与 C++ 库

我是 C++ 语言的新手。当我开始构建一个新项目时,我可以看到两个选项。C++ 可执行文件和 C++ 库。

我尝试在很多地方寻找它们的差异,但什么也没得到。有人可以指导我找到关于这个主题的正确答案吗?

谢谢

以供参考

c++ executable c++11 c++14

5
推荐指数
1
解决办法
5751
查看次数