【问题标题】:How to link opencv and other dll files to output exe of visual studio 2013如何将opencv和其他dll文件链接到visual studio 2013的输出exe
【发布时间】:2014-02-13 13:04:04
【问题描述】:

我是 Visual Studio 的新手,opencv。

我正在为我的项目使用 Visual Studio 2013、opencv 和 c++。

我为我的计算机环境系统配置了(复制路径) opencv 和其他库。

在visual studio中运行项目后,正常情况下项目中会有一个exe文件。

我可以把项目文件夹中的exe文件复制到我电脑的其他地方就可以正常运行了。

这是因为我的电脑环境系统配置了opencv等库。

我想对其他计算机做同样的事情,但我不想用 opencv 和其他库手动配置每台计算机。

在 Visual Studio 2013 中运行项目后,我有什么方法可以将所有内容链接到 exe 文件中,这样我就可以运行 exe 而不依赖于库和 opencv 的路径?

已编辑

我使用opencv安装程序opencv2.4.7.exe

在当前的VS2013我的项目中,我将我的项目和opencv安装程序配置为这个链接 http://www.anlak.com/using-opencv-2-4-x-with-visual-studio-2010-tutorial/

问题:我可以使用来自 opencv 安装程序的文件夹 C:\opencv\build\x64\vc11\staticlib 中的库吗?不需要从源代码 opencv 创建我自己的库吗?

问题: 如果我需要从 opencv 源 (http://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html) 生成新库或在 opencv 安装程序的静态文件夹中使用 lib,如果我想将其全部包含到 exe 文件中,请执行我需要创建新项目并重新配置?

谢谢。

【问题讨论】:

    标签: c++ visual-studio-2010 visual-studio opencv visual-studio-2012


    【解决方案1】:

    首先您需要重新构建 openCV 以生成静态库而不是动态链接库。这样,您的应用程序使用的所有代码都放在一个单独的 exe 文件中(可能会大得多)。您可以将此 exe 文件移至其他计算机,只要它们具有至少与您的体系结构兼容的体系结构,它们应该仍然可以在那里工作。因此,如果您在 x86 perconal 计算机(32 位)上构建它,它基本上应该可以在任何其他个人计算机上运行。如果你在 x64 计算机(AMD 64 位)上构建它,它只能在其他 x64 机器上运行。假设两个系统都使用相同的系统调用 API(Windows NT、POSIX...),至少这是真的。

    对于 openCV,您可以通过将 BUILD_SHARED_LIBS 构建标志设置为 false 来执行此操作(请参阅 OpenCV as a static library (cmake options),以下行取自那里):

    cmake -DBUILD_SHARED_LIBS=OFF ..

    完成此操作后,您会看到 openCV 文件夹看起来与您现在的文件夹非常相似,只是在您的“lib”文件夹中现在将有 .lib 文件而不是 .dll 文件(至少如果你在 Windows 上工作,我假设你在使用 Visual Studio)。

    下一步是转到您的项目设置并将链接器设置为与静态库而不是动态库进行链接。如果你使用过 openCV 的本地方法进行链接,你可以去项目设置 -> 链接器 -> 输入 -> 附加依赖项。在那里,您将所有 openCV 库的扩展名从 .dll 更改为 .lib。

    现在您应该能够重新构建您的应用程序,并且生成的 exe 文件应该包含所有依赖库。

    【讨论】:

    • 谢谢@bverhagen,其他的dll文件怎么样?例如,我使用了 PThreads dll,所以我只是复制了 dll 文件的路径 n 放在计算机环境路径中。
    • 同样的道理适用于您使用的所有动态链接库,并且可能在其他系统上不可用:您需要与静态库链接,因此至少该库的相关部分在您的EXE文件。顺便说一句:您不能将动态库转换为静态库(或者这至少很难)。因此,对于您使用的所有动态库,您应该生成它们的静态库。您最好的猜测是使用生成 dll 文件并将其设置为生成静态库的工具。对于系统 dll,这不是必需的,无论如何它们应该在其他系统上可用。
    • 你能描述一下从头开始的步骤吗? 我是 cmake、opencv 和 c++ 的新手...我所知道的都是在我们编译项目后的 vs2013 中,我们可以得到exe文件。我下载opencv2.4.7.2.exe我安装它并放入c:/opencv,当我在vs2013中创建项目时,我只需配置链接器和依赖项的路径。
    • 哦,我明白了您的问题:您使用 openCV 的预构建库安装程序?对不起,我使用的是 Linux,你别无选择,只能从源代码构建 if(使用我刚刚给你的命令),所以我不认为这是一个选项。这是您应该做的:遵循docs.opencv.org/doc/tutorials/introduction/windows_install/… 中的“通过从源文件制作您自己的库进行安装”。跳过所有第 3 方说明。在第 7 步中,取消选中“BUILD_SHARED_LIBS”。然后你应该得到你应该在 Visual Studio 中链接到的 lib 文件。
    • 您可能需要先检查当前 c:/opencv 文件夹中是否已经存在 lib 文件(也许它们已经存在于预构建的文件夹中),在这种情况下您应该简单地链接给他们而不是 dll 文件(链接时共享库优于静态库),但我严重怀疑它。如果是这种情况,请将 /c 添加到您的构建选项中,并使用命令提示符 (msdn.microsoft.com/en-us/library/ms235627.aspx) 使用“lib”程序手动链接文件
    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2017-02-25
    • 1970-01-01
    • 2016-01-03
    • 2010-10-20
    • 2015-04-04
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多