在Visual Studio C++ 2008中包含DLL文件

3
有没有一种方法可以将dll文件包含在项目中,这样在编译后就不需要将这些dll文件放在与可执行文件相同的文件夹中了。这样我只需要使用它们来编译我的项目。这种可能性是否存在?如果是,能否有人指导我。
我的项目是一个opencv项目,有许多dll文件需要包含在文件夹中,我不知道它们是否是.NET程序集,因为我看到另外一个帖子说可以使用.NET程序集dll文件实现此操作。

为什么需要将那些DLL文件与可执行文件放在同一个文件夹中?是为了调试还是其他原因? - user184968
1
请仅返回翻译后的文本:不要让它运行,例如当我将程序交给别人时,他必须拥有那些dll文件。 - TasostheGreat
3个回答

1

我理解您想要做的是将您的exe文件和其依赖项(dlls)一起部署,但您还希望在项目中进行配置。您可以配置您的项目使用静态库,这样您就不必担心分发您的DLL,因为它们已经构建到exe中。

如果您希望使用DLL,因为您不想使您的exe变得臃肿,那么您的代码将需要实现其加载,即调用LoadLibrary函数和特定导出函数的必要调用。一旦您的代码实现了DLL的加载,那么您就可以按照您描述的方式部署它们。


0
你不能直接使用DLL来实现。"DLL"代表"动态链接库",这意味着它们不是静态链接库。而后者是在创建可执行文件时“包含”(链接)的库。DLL仅在运行EXE时才会被包含。
您可以查看CV文档以了解如何获取CV的静态库版本。

-1

这些dll文件是设计为动态链接的 - 也就是说,它们在程序运行时会随着程序一起加载。

它们不必与您的应用程序放在同一个文件夹中,只需在路径上的某个位置即可,因此您只需要一份opencv dll文件副本,即可为机器上所有基于opencv的程序提供支持。

编辑:您可以构建openCV以使用静态库,但这并不推荐,因为您仍然有外部依赖项,例如ffmpeg和图像格式库,以及如果您使用了Qt,则还有Qt。

在Windows上,您应该构建一个安装程序,可以捆绑exe和dll文件。否则,每次运行应用程序时,Windows都会发出警告innosetup是最简单的之一。


是的,但如果例如我想把程序给一个朋友,我希望只有一个 .exe 文件而没有其他文件。 - TasostheGreat
下降投票是因为MSDN特别指出“路径上的某个地方”是安全风险。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接