如何编译一个独立的OpenCV可执行文件?

6

我编译我的OpenCV程序如下:

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

这在我的电脑上运行得非常完美。我能否只编译程序的共享库,以便它可以在其他没有安装opencv的计算机上运行?如果可以的话,我该怎么做?

3个回答

2

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

解决方法是静态链接存档库(.a文件)而不是动态链接共享库。OpenCV不会分发存档库。因此,需要使用cmake -DBUILD_SHARED_LIBS=OFF从源代码编译存档库。可以使用此存档库创建独立的可执行文件。


1

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


我进行了查找,认为在我的电脑上没有任何OpenCV库的.a版本。 - Anirudh
然后你需要从某个地方获取它们,如果你自己编译它们,那么它们更有可能正常工作。不要忘记不要使用与架构相关的优化选项(-march, -mcpu, -mtune,除非是"generic")。 - lynxlynxlynx
我能否从动态库创建归档库? - Anirudh
虽然我相信这是可能的,但它一定很神秘,我非常怀疑是否有人尝试过。不行。 - lynxlynxlynx
那么我如何为OpenV创建存档库?我需要拉取它的源代码吗? - Anirudh

-1

不行。你需要使用静态库。


“Ported” 的意思与你想的不同。 - Ignacio Vazquez-Abrams
PS:OpenCV库可用于Android。 - Anirudh
是的。为您要部署到的平台分发OpenCV库。 - Ignacio Vazquez-Abrams
或者以其他方式安装它们。 - Ignacio Vazquez-Abrams
@anirudh65024x OpenCV主要是开源的,因此可以进行交叉编译以适用于Android(和其他各种平台)。 - juanchopanza
显示剩余6条评论

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