0

我最近决定在 Windows 7 上使用 MinGW 来看看使用 C++ 的 2D 图形。

由于我只需要 2D 图形,因此任何库或多或少都是可行的(OpenGL、SDL 等)。我决定快速浏览一些并检查他们使用 MinGW 在 Windows 上工作是多么容易。

我很快注意到我测试的每个库(Cairo、SDL 和 GTK+)都需要大量的 dll 文件才能工作。即使从教程之类的东西编译了一个简单的程序后,它也会给我 5 或 6 个不同的 dll 错误,迫使我将它们全部复制到我的程序的工作目录中以使其运行。

我的程序当然可以工作,但是仅仅为了一个简单的程序就拥有这么多的 DLL 是非常麻烦的。使程序在其他人的计算机上运行需要将所有这些 DLL 连同它作为单独的文件一起提供,以及我全局安装但其他人没有的其他 DLL。

由于所需的所有 DLL,像 C++ 这样流行的东西使用起来很烦人,这似乎很奇怪……我做错了什么吗?这个问题有什么神奇的解决方案吗?一些工具可以最大限度地减少甚至完全消除这些并发症?为我的应用程序使用更少的 DLL 会很酷。当然,我不能完全忽略 DLL,但至少将数量减少到一个(一个库 = 一个 DLL)或者有可能将它们组织在自己的子文件夹中会很棒。

4

1 回答 1

1

我的程序当然可以工作,但是仅仅为了一个简单的程序就拥有这么多的 DLL 是非常麻烦的。使程序在其他人的计算机上运行需要将所有这些 DLL 连同它作为单独的文件一起提供,以及我全局安装但其他人没有的其他 DLL。

如果您正在为您的程序制作安装程序,安装程序应该负责在您的程序旁边安装 DLL。这是很常见的做法,对您的用户来说一点也不方便。如果您只是分发包含应用程序的 zip 文件,只需将 DLL 保存在您要压缩的文件夹中(这也是一种非常常见的做法)。

还值得注意的是,您已经必须使用您的应用程序发送 DLL。GCC 应用程序需要libgcc_s_sjlj-1.dlllibstdc++-6.dll. 如果我没记错的话,MSVC 应用程序依赖于 Visual C++ 运行时库。更多的图形库根本不会打扰用户。

我做错什么了吗?

不,这对我来说似乎一切如常。我建议您继续您的项目,而不必过多担心 DLL。

这个问题有什么神奇的解决方案吗?一些工具可以最大限度地减少甚至完全消除这些并发症?

可以查看DLL/EXE 打包程序。但是,非常不推荐这样做,因为防病毒软件往往不喜欢修改后的 EXE。(许多恶意软件使用打包技术,因此防病毒软件通常默认怀疑此类打包应用程序。)

至少将数量减少到一个(一个库 = 一个 DLL)

从技术上讲,您可能可以,但您可能需要重写有问题的图形库,因为现在它是为多个 DLL 设置的。我也真的不推荐这个;DLL 是分开的,因为它们本来就是这样。它们提供了不同的功能(例如,快速浏览 GTK+ 的变更日志,其中提到了 SVG、JPG 和其他文件格式的库,以及许多与主机操作系统、打印机等接口的后端内容),因此它们'被封装到不同的库中。在某些情况下(libjpeg),这些“子库”甚至是由不同的组编写的,而您使用的图形库只是从“子库”调用某些函数。

如果您真的坚持只拥有一个 DLL,我认为您最好寻找一些功能最少的小型库。由于您只想要 2D 图形,因此您可能可以摆脱它。

或者有可能将它们组织在自己的子文件夹中会很棒

不幸的是,你不能这样做。

于 2014-03-18T06:40:51.323 回答