Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 安装和维护多个版本的OpenCV(也适用于任何其他第三方库)_Linux_Opencv_Eclipse Cdt_Fedora_Ld - Fatal编程技术网

Linux 安装和维护多个版本的OpenCV(也适用于任何其他第三方库)

Linux 安装和维护多个版本的OpenCV(也适用于任何其他第三方库),linux,opencv,eclipse-cdt,fedora,ld,Linux,Opencv,Eclipse Cdt,Fedora,Ld,我一直在尝试在我的Fedora15 Lovelock 64位机器上构建和使用OpenCV 2.3.0 背景: 首先,在我的64位Fedora15上,OpenCV2.2.0似乎位于以下位置: /usr/share/opencv /usr/doc /usr/lib64 & /usr/bin 我没有在/usr/include中找到包含文件。这意味着没有安装开发包。当我尝试添加/删除软件时,我的软件包管理器不会列出开发软件包 我需要创建一些应用程序,其中一些只链接到OpenCV

我一直在尝试在我的Fedora15 Lovelock 64位机器上构建和使用OpenCV 2.3.0

背景:

首先,在我的64位Fedora15上,OpenCV2.2.0似乎位于以下位置:

/usr/share/opencv  
/usr/doc  
/usr/lib64 &  
/usr/bin  
我没有在/usr/include中找到包含文件。这意味着没有安装开发包。当我尝试添加/删除软件时,我的软件包管理器不会列出开发软件包

我需要创建一些应用程序,其中一些只链接到OpenCV库的2.2,另一些链接到OpenCV库的2.3.O。因此,我认为最好的解决方案是为我的开发使用的第三方库提供一个单独的位置。因此,我在/local中创建了一个名为soft的目录,并创建了一个OpenCV目录。像这样的目录结构

 /local/soft/
            OpenCV/ 
                   OpenCV2.2.0/  
                              source-files
                              build 
                   OpenCV2.3.0/
                              source-files  
                              build
                              installation  
                                          share/opencv 
                                          doc
                                          include
                                          lib
现在,我尝试构建OpenCV2.3.0,我成功了。我将CMake配置为使用CMake_INSTALL_前缀到上面名为installation的目录,而不是默认的/usr/local/。清洁的嗯

我尝试以同样的方式构建和安装OpenCv 2.2.0。唉,2.2.0在构建过程中出现了一些问题。所以我想我将链接到标准位置中已经存在的版本。但是,当我尝试使用包管理器安装2.2版的开发包时,找不到x86_64的开发文件:-这意味着我没有链接到标准位置中库的头

我无法构建可执行文件,因为链接器ld找不到我安装在非标准位置的OpenCV。尽管我在Eclipse中使用带gcc的-L和-L选项将其指向确切位置

问题1:我在非标准位置维护安装是否正确?/usr/是包管理器始终执行安装的标准位置吗

问题2:链接到这些安装在非标准位置的库的正确方式是什么?为什么ld无法识别lib文件夹中的.so文件

sudo g++ logpolar.cpp -o logpolar.o -I /local/soft/OpenCV/opencv2.3.1/installation/include/ -l/local/soft/OpenCV/opencv2.3.1/build/lib/libopencv_core.so
但是ld不能找到-l/local/soft/OpenCV/opencv2.3.1/build/lib/libopencv_core.so


我检查了lib文件夹,发现libopencv_core.so.2.3有一个漂亮的符号链接。标准方法是使用/usr/local目录结构,它已经有预定义的路径,如/usr/local/bin、/usr/local/sbin、/usr/local/include、/usr/local/lib

你把你的软件放在这里,一切都会正常工作。每个Linux发行版(包括Fedora)都进行了设置,以便从这些库中加载程序库和头文件

如果您使用GNU工具链autoconf,automake=>autotools,您就可以了。使用CMake,您可能需要为/usr/local/include和/usr/local/lib设置路径

另一方面,这种方法不允许您使用多个版本。你只能有一个。/usr/local中的路径优先于/usr/bin中安装的系统路径

你可以保持你的方法,没有什么不对的。我们通常将这样的软件放在/opt文件夹中,因此您可以选择/opt/opencv/X.Y,其中X.Y是版本号

问题2:阅读gcc手册页并搜索-L选项。你需要像这样的东西:

gcc ... -I/opt/opencv/2.0/include -lsystem_lib -L/opt/opencv/2.0/lib -lopencv ... ...
在多个版本中运行程序时,不要忘记设置LD_LIBRARY_PATH以正确加载正确的版本:

LD_LIBRARY_PATH=/opt/opencv/2.0/lib /opt/opencv/2.0/bin/opencv

标准方法是使用/usr/local目录结构,该结构已经具有预定义的路径,如/usr/local/bin、/usr/local/sbin、/usr/local/include、/usr/local/lib

你把你的软件放在这里,一切都会正常工作。每个Linux发行版(包括Fedora)都进行了设置,以便从这些库中加载程序库和头文件

如果您使用GNU工具链autoconf,automake=>autotools,您就可以了。使用CMake,您可能需要为/usr/local/include和/usr/local/lib设置路径

另一方面,这种方法不允许您使用多个版本。你只能有一个。/usr/local中的路径优先于/usr/bin中安装的系统路径

你可以保持你的方法,没有什么不对的。我们通常将这样的软件放在/opt文件夹中,因此您可以选择/opt/opencv/X.Y,其中X.Y是版本号

问题2:阅读gcc手册页并搜索-L选项。你需要像这样的东西:

gcc ... -I/opt/opencv/2.0/include -lsystem_lib -L/opt/opencv/2.0/lib -lopencv ... ...
在多个版本中运行程序时,不要忘记设置LD_LIBRARY_PATH以正确加载正确的版本:

LD_LIBRARY_PATH=/opt/opencv/2.0/lib /opt/opencv/2.0/bin/opencv

好啊我卸载了一切。我在标准位置/usr/local构建并新安装了OpenCV2.3.0。不幸的是,ld仍然无法识别libopencv_core.so和libopencv_highgui.so库。即使将-L选项指定给gccw,您所说的识别是什么意思?如果你的意思是链接的程序找不到它,你必须修改我写的LD_LIBRARY_路径。还可以尝试使用ldd程序查看所有依赖项。确定。我卸载了一切。我刚建好房子,刚进去
在标准位置/usr/local安装OpenCV2.3.0。不幸的是,ld仍然无法识别libopencv_core.so和libopencv_highgui.so库。即使将-L选项指定给gccw,您所说的识别是什么意思?如果你的意思是链接的程序找不到它,你必须修改我写的LD_LIBRARY_路径。还可以尝试使用ldd程序查看所有依赖项。