【问题标题】:How to make package of .exe file with required .dll and lib (opencv) files in visual studio 2010 C++如何在 Visual Studio 2010 C++ 中使用所需的 .dll 和 lib (opencv) 文件制作 .exe 文件包
【发布时间】:2014-04-15 11:19:25
【问题描述】:

我创建了一个 opencv 项目,其中包括在项目属性中包含 opencv 的头文件、*.lib 和 *.dll 文件的路径,并且我在我创建的 .cpp 中有 opencv 头文件的硬编码路径。让我们说我需要把这个项目交给客户,所以我只需要直接在客户系统中给出执行的.exe文件。

所以请任何人帮助我如何打包 .dll 和 .lib 的路径以及我的项目 .exe 文件。还是有任何其他方式可以将.exe文件发送给客户,其中包括所有内容,即可以执行opencv以及我在客户系统中的逻辑。

提前致谢,分享答案总是值得的。

【问题讨论】:

  • 您要分发二进制文件(exe)还是项目(code/sln/vcproj)?
  • “我有头文件的硬编码路径” - 哎哟。这听上去简直是一针见血。
  • 嘿@berak,我只需要发送 .exe 文件,硬代码意味着将 opencv 的标头包含到我的 .c++ 文件中。
  • 如果你只需要给你的客户一个可执行文件,那你为什么要包含静态库文件(.lib)呢?您的可执行文件使用的任何已编译代码都应在构建过程中从您的静态库中自动链接。
  • 嘿@JBentley,这没有发生,构建 .exe 文件不会自动包含(链接)所有这些 lib 和 dll。

标签: c++ visual-studio-2010 opencv dll package


【解决方案1】:

为您正在使用的所有内容使用相对路径并将它们一起发送(如果您被允许,请先检查许可证!),或者如果您需要为您的用户提供源代码(作为 VS 解决方案)并且您不能/不想对工具的路径进行硬编码,请使用 CMake 生成解决方案文件。

如果您需要将二进制文件与可执行文件一起打包(仍然允许),您可以使用像 Inno Setup 这样的安装程序打包应用程序

您需要确保您的应用程序所需的每个依赖项都已交付,否则您的客户将无法运行您的软件。要找出 Win 环境中的依赖关系,请尝试使用每个 Visual Studio 副本附带的依赖关系工具

作为旁注:您不应该在包含指令中放置完整的绝对路径,例如

#include "C:\mysystem\helloworld\app\opencv\header.h"

因为这是在部署或重新分发源代码时出现编译问题或不必要的预处理的可靠方法。这不适用于二进制文件:它们只需要找到所需的已编译依赖项/工具。

【讨论】:

  • 嘿,谢谢您的回复,是的@Marco 当然,我不想向我的客户展示我的源代码。以及关于路径硬编码,在我的 c++ 文件中。我需要为opencv(开源库)的头文件提供路径。我试图通过将头文件,.lib和.dll放在项目的调试文件夹中来构建它仍然不适合我。即我的.exe文件未包含上述所有文件。
  • 你可以在编译后运行你的应用程序吗?你得到什么错误?
  • 我可以在我的系统中运行,因为我已经在我的 PC 中安装了 opencv,并且存在的 *.dll 可以启动并运行。但是当我尝试在我的朋友 PC 上安装时(不包含 opencv 安装)它不起作用。
  • 这就是你想要做的......然后你需要与你的可执行文件一起部署所有需要的openCV dll。使用依赖关系查找工具找出它们并将它们与您的应用程序一起发布。
【解决方案2】:

Visual Studio 2010 不提供 C++ 的包创建。

在我看来,您必须使用第三方软件,例如 [Advanced Installer]1 搜索所需的dll 和 提供我们作为安装程序创建包。

对于您包含在标头中的路径。

如果您有.exe,那么运行您的应用程序就没有关系。

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多