如何在exe中包含所有dll?

Pav*_*ych 7 c++ dll opencv exe visual-studio-2012

我有一个Visual Studio 12项目; 用C++编写的源代码; 这是一个OpenCV项目.我想将我编译的程序提供给其他人,但是,在其他PC上,我收到有关丢失一些dll的错误消息.我的程序使用了许多OpenCV(也许,不仅仅是)dll.我该如何解决这个问题? 也许在VS 12中可以选择在.exe中包含所有dll? 这是一个非常类似的问题没有正确答案: 在visual studio c ++ 2008中包含dll

dat*_*olf 12

DLL本身不能"静态链接"到可执行文件中; 这完全违背了他们的目的(实际上你可以使用一些非常奇怪的巫术技巧来实际做到这一点,但这既不推荐也不应该尝试,如果你不得不提出这个问题).

简单的解决方案是识别程序所需的所有DLL(只需在调试器中启动程序将生成列出所有这些的日志文件)并将这些DLL复制到EXE所在的同一目录中; 当发生这种情况时,带有EXE文件的目录也是系统在默认配置中前进到standad系统directoris之前查找DLL的第一个目录.打包并以这种方式分发.

  • @schlebe:最初的问题是,如果首先没有运行时环境解释器,如何“嵌入”DLL(或静态链接它)。这是一个完全不同的问题范围。与其他操作系统的比较正在改变目标,因为 OP 询问特定的操作系统,而其他系统的“营销”在这里无济于事。 (2认同)

ber*_*rak 5

更复杂的解决方案是,从 src 构建静态 opencv 库,然后将您的程序链接到这些库,从而产生 1 个大型二进制 exe 块,该块不使用任何 dll(除了 ffmpeg,不确定那个)。

要构建静态库,您需要运行 cmake : BUILD_SHARED_LIBS=OFF

但在这样做之前请深呼吸。链接你的程序将变得更加困难,因为现在你必须手动链接所有 zlib、libpng、任何依赖项(之前已方便地链接到你的 dll 中)

同样,最简单的解决方案是使用您的程序部署所有 opencv dll。