2012-03-06 23 views
2

反对的OpenCV如何静态链接我想在我的Qt工程对OpenCV库(Debian的挤压包)链接。该项目是一个纯C++项目,不使用Qt库,它只是使用Qt构建系统(qmake)。生成MakeFile。在Qt工程

我觉得OpenCV库中的包是静态编译和动态编译的,因为在/usr/lib中有.so对象和.a对象。我正在寻找Qt项目文件的链接选项来告诉构建系统寻找静态库。我也尝试添加LIBS+= -static -lcv ,...,但没有奏效。

回答

3

我有很多的尝试部署所用的OpenCV和QT一个项目的问题。静态链接最终是一个可怕的兔子洞,也许我不够聪明,但我们想出了我觉得更好的选择。如果感兴趣,请检查一下。它涉及到我所见过的书面:)

静态编译使用许多独立的库可能极其棘手的项目中的最疯狂的命令。如果他们没有被GPL授权,那么将其他库建立到你的二进制文件中也会出现奇怪的法律问题。相反,我们找到了一种更简单的方法来将二进制文件及其依赖关系分享到一个整洁的小包中。

首先建立一个正常释放二进制,如果你只是正常发育 接下来进入本次发布目录,并运行此命令。它会将二进制文件需要的每个依赖项复制到您选择的文件夹中!

cp `ldd NAMEOFYOURRELEASE | sed -re s/^.+\=\>// | sed -re 's/^(.+) \(.+\)/\1/'` FOLDERNAMETOPUTLIBRARIES/ 

为NAMEOFYOURRELEASE把您创建的executeable二进制文件的名称,

和FOLDERNAMETOPUTLIBRARIES把一个文件夹,你会希望所有依赖复制到 3.现在我们需要的名字告诉可执行文件在一台陌生的新计算机上的何处寻找依赖关系。 进入您的.pro文件为您的项目,并添加以下两行

QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/FOLDERNAMETOPUTLIBRARIES 
QMAKE_LFLAGS_RPATH= 

现在,你应该能够移动这个二进制和无论你想依赖它的文件夹!

+1

对旧问题的新答案!现在我们使用与ARM架构不同的主板。我必须重新编译OpenCV。我要试一下。谢谢 – 2012-07-16 20:20:06

+0

很酷!很高兴它仍然有潜在的用途! – blorgggg 2012-07-16 23:56:22