我想在我的Qt项目中链接OpenCV库(debian squeeze包)。该项目是一个不使用Qt库的普通C ++项目,它只使用Qt构建系统(qmake)。生成MakeFile。
我认为包中的OpenCV库是静态和动态编译的,因为.so
中有.a
个对象和/usr/lib
个对象。我正在寻找Qt项目文件的链接选项,告诉构建系统寻找静态库。我也试过添加LIBS+= -static -lcv ,...
但是没有用。
答案 0 :(得分:3)
我在尝试部署使用OpenCV和QT的项目时遇到了很多问题。静态链接最终成为一个可怕的兔子洞,也许我不够聪明,但我们想出了一个更好的选择。如果有兴趣,请查看。它涉及我见过的最疯狂的命令:)
静态编译使用许多独立库的项目可能会非常棘手。如果它们不是GPL,那么将其他库构建到二进制文件中也可能存在奇怪的法律问题。相反,我们发现了一种更简单的方法,可以在一个整齐的小包中共享二进制及其依赖。
首先构建一个正常发布的二进制文件,就好像你正常开发一样 接下来进入此版本目录并运行此命令。它会将二进制文件所需的每个依赖项复制到您选择的文件夹中!
cp `ldd NAMEOFYOURRELEASE | sed -re s/^.+\=\>// | sed -re 's/^(.+) \(.+\)/\1/'` FOLDERNAMETOPUTLIBRARIES/
对于NAMEOFYOURRELEASE,输入您创建的可执行二进制文件的名称,
并为FOLDERNAMETOPUTLIBRARIES设置您希望将所有依赖项复制到的文件夹的名称 3.现在我们需要告诉可执行文件在奇怪的新计算机上查找依赖项的位置。 进入项目的.pro文件并添加这两行
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/FOLDERNAMETOPUTLIBRARIES
QMAKE_LFLAGS_RPATH=
现在你应该可以在任何你想要的地方移动这个二进制文件及其依赖文件夹了!
答案 1 :(得分:1)
答案 2 :(得分:0)
当您使用静态链接opencv时,首先检查您的库是否真的是静态链接,为此,请打开开发人员命令提示符msvc,导航到您的库路径,然后键入以下命令:
lib /LIBS opencv_world.lib
除了opencv_world.lib外,您还可以放置其他任何库名。 然后检查其中仅包含引用的.obj文件,因此您可以静态使用此库。 然后记住当您在opencv中使用静态库时,您需要在其他一些库中进行动态链接中不需要的项目。这些库位于您的库目录中,它们的时间不以opencv开头。 您可以在下面看到其中的一些:
IlmImf.lib
ippicvmt.lib
ippiw.lib
ittnotify.lib
libjasper.lib
libtiff.lib
libwebp.lib
zlib.lib