开发者

Installation and maintenance of multiple versions of OpenCV (applicable to any other 3rd party library as well)

开发者 https://www.devze.com 2023-04-10 17:21 出处:网络
I have been trying to do build and use OpenCV 2.3.0 on my Fedora15 Lovelock 64bit machine. Background:

I have been trying to do build and use OpenCV 2.3.0 on my Fedora15 Lovelock 64bit machine.

Background:

First, on my 64bit Fedora15, OpenCV2.2.0 seems to be in the locations namely

/usr/share/opencv  
/usr/doc  
/usr/lib64 &  
/usr/bin  

I do not find the include files though (in /usr/include). This means that the development package was n t installed. My package manager does not list the development packages when i try to Add/remove software.

I have a need to create applications, some of which just link to 2.2 and others which link to 2.3.O of the OpenCV library.So, I thought the best solution would be to have a separate location for 3rd party libraries that i use for my development . So I created a directory in /local named soft and created an OpenCV directory. A directory structure like this one.

 /local/soft/
            OpenCV/ 
                   OpenCV2.2.0/  
                              source-files
                              build 
                   OpenCV2.3.0/
                              source-files开发者_Python百科  
                              build
                              installation  
                                          share/opencv 
                                          doc
                                          include
                                          lib

Now, i tried building OpenCV2.3.0 and i succeeded. I configure CMake to use CMAKE_INSTALL_PREFIX to the directory named "installation" (see above), instead of the default /usr/local/. Clean. huh?

I tried building and installing OpenCv 2.2.0 in the same way. Alas 2.2.0 complains something during the build. So i thought i ll link to the already existing version in the standard locations. BUT, when i try to install the dev packages for 2.2 using my package manager,the development files for x86_64 are not found :-) which means i dont have the headers to link to the libraries in the standard location.

I cant build my executable since linker ld would not find the OpenCV that i have installed in the non-standard location.(although i point it to the exact location using the -L and -l options with gcc in my Eclipse).

Question 1: Am i doing the right thing in maintaining installations in non-standard locations? Is /usr/ the standard location where the package manager will always do the installation?

Question2 : What is the right way of linking to these libraries installed in non-standard locations? Why would not ld recognize my .so files in the lib folder?

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

But ld canot find -l/local/soft/OpenCV/opencv2.3.1/build/lib/libopencv_core.so

I checked the lib folder and there sure is a beautiful symbolic link to libopencv_core.so.2.3


The standard approach is to use /usr/local directory structure that already has predefined paths like /usr/local/bin, /usr/local/sbin, /usr/local/include, /usr/local/lib.

You put your software here and everything will JustWork(TM). Every Linux distro (incl. Fedora) is set up so it will load programs (libraries, headers) from this libraries.

If you would use GNU toolchain (autoconf, automake => autotools) you would be fine. With CMake you probably need to setup paths for /usr/local/include and /usr/local/lib.

On the other hand this approach wont let you use multiple versions. You can only have one. The one in /usr/local overrides the system one (installed in /usr/bin) because these paths goes first.

You can keep your approach, it is nothing incorrect. We usually put such a software in the /opt folder, so you would go for /opt/opencv/X.Y where X.Y are the version numbers.

Q2: Read the gcc man page and search for the -L option. You need something like:

gcc ... -I/opt/opencv/2.0/include -lsystem_lib -L/opt/opencv/2.0/lib -lopencv ... ...

Do not forget to set LD_LIBRARY_PATH when running programs in multiple versions to properly load correct version:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号