【问题标题】:How to compile a standalone OpenCV executable?如何编译独立的 OpenCV 可执行文件?
【发布时间】:2012-07-03 05:52:50
【问题描述】:

我按如下方式编译我的 OpenCV 程序:

g++ `pkg-config --cflags opencv --libs opencv` <filename>.cpp

它在我的电脑上完美运行。我可以用程序单独编译共享库,以便它可以在其他没有 opencv 的计算机上运行吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: c++ linux opencv g++


    【解决方案1】:

    没有。您需要使用静态库。

    【讨论】:

    • 是不是说opencv程序不能移植?
    • “移植”的意思和你想象的不一样。
    • 我真正想做的是通过JNI在Android上使用cpp代码。
    • 库对此无能为力,除非它们已经可用于目标系统;库由编译后的代码组成,并且(通常)以单一平台为目标。
    • 那么有什么方法可以在我打算分发的android应用程序中使用opencv?
    【解决方案2】:

    在某种程度上是的:查找静态链接。您的 opencv 副本必须具有 .a 版本的库(不仅仅是您提到的 .so),对于任何其他依赖项也是如此。

    【讨论】:

    • 我查了一下,觉得我的电脑里没有 .a 版本的 opencv 库
    • 那么你必须把它们放在某个地方,如果你自己编译它们更有可能工作。不要忘记也不使用依赖于架构的优化(-march、-mcpu、-mtune,除非“通用”)。
    • 我可以从动态库创建存档库吗?
    • 虽然我确信这是可能的,但它一定很神秘,我非常怀疑是否有人尝试过。没有。
    • 那么如何为 openv 创建归档库?我是否必须为此提取其源代码?
    【解决方案3】:

    编译期间的程序会动态链接到我们计算机上的共享库(.so 文件)。编译的可执行文件在运行时使用这些共享库。但是这些共享库可能不存在于其他计算机上,因此可能无法运行可执行文件。

    解决方案是静态链接存档库(.a 文件),而不是动态链接共享库。 OpenCV 不会像这样分发存档库。因此,必须使用cmake -DBUILD_SHARED_LIBS=OFF 从其源代码编译归档库。此存档库可用于创建独立的可执行文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2010-12-20
      • 2012-08-01
      • 2011-05-26
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多