2011-08-16 40 views
1

有没有办法将dll包含在项目中,这样我就不必在编译后将这些dll与我的可执行文件放在同一个文件夹中。 这样我就可以和他们一起编译我的项目。这是否可能,如果是的话,有人可以指导我。在Visual Studio中包含dll C++ 2008

我的项目是一个opencv项目,有很多dll,我将不得不包括在文件夹中,我不知道他们是否是.NET程序集,因为我读了另一篇文章说它可以用.NET程序集DLL完成。

+0

为什么你需要把这些dll与你的可执行文件放在同一个文件夹中?为了调试或其他原因? –

+1

没有,所以它运行,例如,当我把程序给别人时,他必须有这些DLL – TasostheGreat

回答

-1

dll被设计为动态链接的 - 也就是说,它们在程序运行时加载。

它们不必与应用程序位于相同的文件夹中,只是在路径上的某处,因此您只需要一台opencv dll副本即可用于计算机上所有基于opencv的程序。

编辑:您可以构建openCV以使用静态库,但不建议,您仍然有外部依赖关系,如ffmpeg和图像格式库,以及Qt(如果使用的话)。

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

+0

是的,但是如果例如我想将程序给一个朋友,我想只有一个.exe和不其他文件 – TasostheGreat

+0

因为MSDN明确指出“路径上某处”存在安全风险,因此请予以回拨。 – MSalters

0

你不能直接使用DLL的。 “DLL”代表“动态链接库”,这意味着它们不是静态链接库。当你创建你的可执行文件时,它是“包含”(链接)的后一类库。只有在运行EXE时才会包含DLL。

你可以查看简历文档,看看你如何得到静态库版本的简历。

0

我知道你想要做的是部署你的exe文件及其依赖关系(dll),但你也希望它在项目中配置。您可以将项目配置为使用静态库,而不必担心分发DLL,因为它们已经内置到exe中。

如果你想使用DLL,因为你不想膨胀你的exe,那么你的代码将不得不实现它的加载,即调用LoadLibrary函数和对特定导出函数的必要调用。一旦你的代码实现了DLL的加载,那么你可以按照你所描述的方式部署它们。