On 07/14/2011 07:19 PM, Ryan Farrell wrote: > Hi everyone, > > I'm using cmake to try and Build the latest release of OpenCV (2.3), but > am encountering an error. It's important to know that this is on a > shared cluster machine where I don't have root access. I've therefore > built and installed a few libraries (ffmpeg for example) locally. I'm > trying to use these libraries (which, unlike the system installed > versions, have both static and shared libraries built) in my opencv > build. Somehow /usr/local/lib is creeping into my build and causing > problems... I haven't specified that path anywhere and it's not in my > PATH/LD_LIBRARY_PATH environment variables: > > PATH=[trimmed]/farrell/bin:/u/vis/software/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11/bin > LD_LIBRARY_PATH=/u/vis/software/lib:/usr/lib64:/usr/lib > > > > So, here's the command that I'm using to configure with cmake and the > output it produces (trimmed in a few places for brevity). Cmake seems > to find the ffmpeg libraries fine (in particular, libavcodec which is > the one it dies on when building). Note that /usr/local/lib is also > producing some troublesome warnings about hiding the correct libraries > in /usr/lib64... > > > farrell@banana2:/u/vis/software/dist/OpenCV-2.3.0/release> cmake > -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_PYTHON_SUPPORT=1 > -DCMAKE_INSTALL_PREFIX=/u/vis/software -DCMAKE_VERBOSE=1 > -DCMAKE_BUILD_WITH_INSTALL_RPATH=1 .. > -- The C compiler identification is GNU > -- The CXX compiler identification is GNU > -- Check for working C compiler: /usr/bin/gcc > -- Check for working C compiler: /usr/bin/gcc -- works > -- Detecting C compiler ABI info > -- Detecting C compiler ABI info - done > -- Check for working CXX compiler: /usr/bin/c++ > -- Check for working CXX compiler: /usr/bin/c++ -- works > -- Detecting CXX compiler ABI info > -- Detecting CXX compiler ABI info - done > -- Extracting svn version, please wait... > -- SVNVERSION: > -- Detected version of GNU GCC: 41 (401) > > ... > > -- package 'gstreamer-video-0.10' not found > *-- checking for module 'libavcodec' > -- found libavcodec, version 52.20.0 > *-- checking for module 'libavformat' > -- found libavformat, version 52.31.0 > -- checking for module 'libavutil' > -- found libavutil, version 49.15.0 > -- checking for module 'libswscale' > -- found libswscale, version 0.7.1 > -- Looking for libavformat/avformat.h > -- Looking for libavformat/avformat.h - found > -- Looking for ffmpeg/avformat.h > -- Looking for ffmpeg/avformat.h - not found > -- checking for module 'libdc1394-2' > > ... > > -- Parsing 'cvconfig.h.cmake' > -- GRFMT: > /usr/lib64/libz.so;/usr/lib64/libjpeg.so;/usr/lib64/libpng.so;/usr/lib64/libz.so;/usr/lib64/libtiff.so;libjasper > -- HIGHGUI_LIBS: > gthread-2.0;rt;glib-2.0;avcodec;avformat;avutil;swscale;/usr/lib64/libbz2.so > -- OPENCV_LIBS: dl;m;pthread;rt > -- > -- General configuration for opencv 2.3.0 > ===================================== > -- > -- Built as dynamic libs?: ON > -- Compiler: > -- C++ flags (Release): -Wall -Wno-long-long -pthread > -ffunction-sections -O3 -DNDEBUG -fomit-frame-pointer -ffast-math > -msse -msse2 -DNDEBUG > -- C++ flags (Debug): -Wall -Wno-long-long -pthread > -ffunction-sections -g -O0 -DDEBUG -D_DEBUG -ggdb3 > -- Linker flags (Release): > -- Linker flags (Debug): > -- > > ... > > -- > -- Video I/O: > -- DC1394 1.x: 0 > -- DC1394 2.x: 0 > *-- FFMPEG: 1 > -- codec: 1 > *-- format: 1 > -- util: 1 > -- swscale: 1 > -- gentoo-style: 1 > -- GStreamer: 0 > -- UniCap: FALSE > -- PvAPI: > -- V4L/V4L2: / > -- Xine: FALSE > -- > > ... > > -- Documentation: > -- Build Documentation: NO > -- > -- Install path: /u/vis/software > -- > -- cvconfig.h is in: /u/vis/software/dist/OpenCV-2.3.0/release > -- ----------------------------------------------------------------- > -- > -- Configuring done > CMake Warning at modules/highgui/CMakeLists.txt:259 (add_library): > Cannot generate a safe linker search path for target opencv_highgui > because > files in some directories may conflict with libraries in implicit > directories: > > link library [libz.so] in */usr/lib64* may be hidden by files in: > */usr/local/lib > * link library [libtiff.so] in */usr/lib64* may be hidden by files in: > */usr/local/lib > > * Some of these libraries may not be found correctly. > > > CMake Warning at modules/highgui/CMakeLists.txt:259 (add_library): > Cannot generate a safe runtime search path for target opencv_highgui > because files in some directories may conflict with libraries in implicit > directories: > > runtime library [libz.so.1] in /usr/lib64 may be hidden by files in: > /usr/local/lib > runtime library [libtiff.so.3] in /usr/lib64 may be hidden by files in: > /usr/local/lib > > Some of these libraries may not be found correctly. > > > CMake Warning at modules/highgui/CMakeLists.txt:399 (add_executable): > Cannot generate a safe linker search path for target opencv_test_highgui > because files in some directories may conflict with libraries in implicit > directories: > > link library [libz.so] in /usr/lib64 may be hidden by files in: > /usr/local/lib > > Some of these libraries may not be found correctly. > > > CMake Warning at modules/highgui/CMakeLists.txt:399 (add_executable): > Cannot generate a safe runtime search path for target opencv_test_highgui > because files in some directories may conflict with libraries in implicit > directories: > > runtime library [libz.so.1] in /usr/lib64 may be hidden by files in: > /usr/local/lib > > Some of these libraries may not be found correctly. > > > -- Generating done > CMake Warning: > Manually-specified variables were not used by the project: > > BUILD_PYTHON_SUPPORT > > > -- Build files have been written to: > /u/vis/software/dist/OpenCV-2.3.0/release > > > > > Then, when I run the build, I get the error below, showing that the > "-L/usr/local/lib" is causing the problem, clearly taking precedence > over the rpath "-Wl,-rpath,/u/vis/software/lib:/usr/local/lib". > > > > Linking CXX shared library ../../lib/libopencv_highgui.so > /usr/bin/c++ -fPIC -Wall -Wno-long-long -pthread -ffunction-sections > -O3 -DNDEBUG -fomit-frame-pointer -ffast-math -msse -msse2 -DNDEBUG > -shared -Wl,-soname,libopencv_highgui.so.2.3 -o > ../../lib/libopencv_highgui.so.2.3.0 > CMakeFiles/opencv_highgui.dir/src/cap.o > CMakeFiles/opencv_highgui.dir/src/cap_images.o > CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.o > CMakeFiles/opencv_highgui.dir/src/loadsave.o > CMakeFiles/opencv_highgui.dir/src/precomp.o > CMakeFiles/opencv_highgui.dir/src/utils.o > CMakeFiles/opencv_highgui.dir/src/window.o > CMakeFiles/opencv_highgui.dir/src/bitstrm.o > CMakeFiles/opencv_highgui.dir/src/grfmt_exr.o > CMakeFiles/opencv_highgui.dir/src/grfmt_tiff.o > CMakeFiles/opencv_highgui.dir/src/grfmt_jpeg2000.o > CMakeFiles/opencv_highgui.dir/src/grfmt_bmp.o > CMakeFiles/opencv_highgui.dir/src/grfmt_imageio.o > CMakeFiles/opencv_highgui.dir/src/grfmt_png.o > CMakeFiles/opencv_highgui.dir/src/grfmt_sunras.o > CMakeFiles/opencv_highgui.dir/src/grfmt_base.o > CMakeFiles/opencv_highgui.dir/src/grfmt_pxm.o > CMakeFiles/opencv_highgui.dir/src/grfmt_jpeg.o *-L/usr/local/lib* -ldl > -lm -lpthread -lrt ../../lib/libopencv_core.so.2.3.0 > ../../lib/libopencv_imgproc.so.2.3.0 -lz -ljpeg -lpng -lz -ltiff > ../../3rdparty/lib/liblibjasper.a -lgthread-2.0 -lrt -lglib-2.0 > -lavcodec -lavformat -lavutil -lswscale -lbz2 > ../../lib/libopencv_core.so.2.3.0 -ldl -lm -lpthread -lz -lrt > *-Wl,-rpath,/u/vis/software/lib:/usr/local/lib * > /usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching > for -lz > /usr/bin/ld: skipping incompatible /usr/local/lib/libz.a when searching > for -lz > /usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching > for -lz > /usr/bin/ld: skipping incompatible /usr/local/lib/libz.a when searching > for -lz > /usr/bin/ld: skipping incompatible /usr/local/lib/libtiff.so when > searching for -ltiff > /usr/bin/ld: skipping incompatible /usr/local/lib/libtiff.a when > searching for -ltiff > /usr/bin/ld: skipping incompatible /usr/local/lib/libgthread-2.0.so > <http://libgthread-2.0.so> when searching for -lgthread-2.0 > /usr/bin/ld: skipping incompatible /usr/local/lib/libglib-2.0.so > <http://libglib-2.0.so> when searching for -lglib-2.0 > /usr/bin/ld: skipping incompatible /usr/local/lib/libavcodec.a when > searching for -lavcodec > /usr/bin/ld: skipping incompatible /usr/local/lib/libavcodec.a when > searching for -lavcodec > /usr/bin/ld: cannot find -lavcodec > collect2: ld returned 1 exit status > make[2]: *** [lib/libopencv_highgui.so.2.3.0] Error 1 > make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2 > make: *** [all] Error 2 > > > So, my question is how do I get rid of "/usr/local/lib", in partiuclar > the "-L/usr/local/lib"? I'd also love to get rid of the warnings that > hint that for these other libs, the /usr/lib64 versions are getting > overshadowed by /usr/local/lib versions. > > Thanks in advance! > Ryan
The prominent position of -L/usr/local/lib between the object files and the libraries to link against suggests the assumption that it's induced by a LINK_DIRECTORIES() command. Grepping for "link_directories" in the OpenCV source tree reveals that there are only a few occasions where this can happen: The highgui module, TBB and IPP. You might check the arguments of LINK_DIRECTORIES() to see if they contain a /usr/local/lib. Regards, Michael PS: Which CMake version do you use? _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
