1

So i already install OpenCV library two years ago on virtualenviroment for python and it work well using this step. Now i create some image processing program in C languange, but everytime i try to compile, it always couldn't find the OpenCV library.

Package checking always able to detect OpenCV
$ pkg-config --modversion opencv
3.1.0

But if i run my make file

Below my make file, linux.sh

#!/bin/sh

# if [ $# -gt 0 ] ; then
#     base=`basename $1`
#     echo "compiling $base"
#     g++ -ggdb `pkg-config opencv --cflags --libs` $1 -o $base 
# if [ $# -gt 0 ] ; then
#   base=`basename $1 .c`
#   echo "compiling $base"
#   gcc -ggdb `pkg-config opencv --cflags --libs` $base.c -o $base 
if [ $# -gt 0 ] ; then
    base=`basename $1 .cpp`
    echo "compiling $base"
    g++ -ggdb `pkg-config opencv --cflags --libs` $base.cpp -o $base 
else
    for i in *.c; do
        echo "compiling $i"
        gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv` -lm;
    done
    for i in *.cpp; do
        echo "compiling $i"
        g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv` -lm;
    done
fi

It always return this

compiling main.c
/usr/bin/ld: cannot find -lopencv_aruco
/usr/bin/ld: cannot find -lopencv_bgsegm
/usr/bin/ld: cannot find -lopencv_bioinspired
/usr/bin/ld: cannot find -lopencv_ccalib
/usr/bin/ld: cannot find -lopencv_dnn
/usr/bin/ld: cannot find -lopencv_dpm
/usr/bin/ld: cannot find -lopencv_fuzzy
/usr/bin/ld: cannot find -lopencv_line_descriptor
/usr/bin/ld: cannot find -lopencv_optflow
/usr/bin/ld: cannot find -lopencv_plot
/usr/bin/ld: cannot find -lopencv_reg
/usr/bin/ld: cannot find -lopencv_saliency
/usr/bin/ld: cannot find -lopencv_stereo
/usr/bin/ld: cannot find -lopencv_structured_light
/usr/bin/ld: cannot find -lopencv_rgbd
/usr/bin/ld: cannot find -lopencv_surface_matching
/usr/bin/ld: cannot find -lopencv_tracking
/usr/bin/ld: cannot find -lopencv_datasets
/usr/bin/ld: cannot find -lopencv_text
/usr/bin/ld: cannot find -lopencv_face
/usr/bin/ld: cannot find -lopencv_xfeatures2d
/usr/bin/ld: cannot find -lopencv_shape
/usr/bin/ld: cannot find -lopencv_ximgproc
/usr/bin/ld: cannot find -lopencv_xobjdetect
/usr/bin/ld: cannot find -lopencv_xphoto
/usr/bin/ld: cannot find -lopencv_videoio
/usr/bin/ld: cannot find -lopencv_imgcodecs
collect2: error: ld returned 1 exit status

I search where my OpenCV library located, and i found it in /usr/local/lib : It contain everything that needed such as libopencv_aruco.so.3.1, libopencv_bgsegm.so.3.1 and etc.

I have try several solution online but it still not working. So, how could i solve this problem without ruining my entire system that still working fine?

Update #1 Result from pkg-config --libs opencv

-L/usr/local/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn -lopencv_dpm -lopencv_fuzzy -lopencv_line_descriptor -lopencv_optflow -lopencv_plot -lopencv_reg -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_rgbd -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_face -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_xobjdetect -lopencv_objdetect -lopencv_ml -lopencv_xphoto -lippicv -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_photo -lopencv_imgproc -lopencv_core

I try one solution from again here :

Step i did :

sudo gedit /etc/ld.so.conf.d/Robotika.conf

And in that, i type this

/usr/local/lib

After that

sudo ldconfig

OK BASED on comment, this solution is not for my case

Update #2 When i run

$ namei -l /usr/local/lib/libopencv_aruco.so
f: /usr/local/lib/libopencv_aruco.so
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root local
drwxr-xr-x root root lib
                     libopencv_aruco.so - No such file or directory

library not detected, but if i run :

$ namei -l /usr/local/lib/libopencv_aruco.so.3.1
f: /usr/local/lib/libopencv_aruco.so.3.1
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root local
drwxr-xr-x root root lib
lrwxrwxrwx root root libopencv_aruco.so.3.1 -> libopencv_aruco.so.3.1.0
-rw-r--r-- root root   libopencv_aruco.so.3.1.0

it detected.

9
  • So, what is the output of pkg-config --libs opencv? May 4 '20 at 11:18
  • @steeldriver, i just add output of that command and i try another solution but still not work, maybe I do that step wrong?
    – Albert H M
    May 4 '20 at 13:38
  • ldconfig only affects the loading of libraries at runtime afaik - it won't help here. Please check that the OpenCV .so files in /usr/local/lib are readable by the invoking user ex. namei -l /usr/local/lib/libopencv_aruco.so May 4 '20 at 13:51
  • @steeldriver, ok i have check what you suggest, above my system output in Update #2
    – Albert H M
    May 4 '20 at 14:26
  • OK thanks - so it looks like the libraries are there but (at least some of) the symbolic links are missing (there should be a symlink from libopencv_aruco.so -> libopencv_aruco.so.3.1 for example) May 4 '20 at 14:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.