Skip to content
This repository has been archived by the owner on Jan 25, 2022. It is now read-only.

problem with make in ubuntu #365

Closed
eghbalhosseini opened this issue Oct 23, 2017 · 7 comments
Closed

problem with make in ubuntu #365

eghbalhosseini opened this issue Oct 23, 2017 · 7 comments

Comments

@eghbalhosseini
Copy link

eghbalhosseini commented Oct 23, 2017

I am building mexopencv in ubuntu 16.04 but get the following error during make process

Building with 'g++'.
/tmp/mex_1045233700939060_22757/DPMDetector_.o: In function `mexFunction':
DPMDetector_.cpp:(.text+0x1b8): undefined reference to `cv::dpm::DPMDetector::create(std::vector<std::string, std::allocator<std::string> > const&, std::vector<std::string, std::allocator<std::string> > const&)'
DPMDetector_.cpp:(.text+0x24e): undefined reference to `cv::dpm::DPMDetector::create(std::vector<std::string, std::allocator<std::string> > const&, std::vector<std::string, std::allocator<std::string> > const&)'
collect2: error: ld returned 1 exit status

Makefile:171: recipe for target 'opencv_contrib/+cv/private/DPMDetector_.mexa64' failed
make: *** [opencv_contrib/+cv/private/DPMDetector_.mexa64] Error 255

Please let me know if this a known problem and how it could be fixed.

Thanks,
Eghbal

@amroamroamro
Copy link
Collaborator

Can you provide more info about your environment, like what opencv version you're using, how it was built, whether you've enabled opencv_contrib, etc..

The most important thing is to make sure you're using the correct version 3.3.0

You should start with the wiki, it has detailed installation instructions:
https://github.com/kyamagu/mexopencv/wiki/Installation-%28Linux%2C-MATLAB%2C-OpenCV-3%29

@eghbalhosseini
Copy link
Author

eghbalhosseini commented Oct 24, 2017

Thanks, I followed the link and mexopencv seems to install fine, however when I run the command cv.VideoCapture I get the following error

Invalid MEX-file '/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64':
Missing symbol '_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5rfindEcm' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm'
required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE14_M_replace_auxEmmmc'
required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignEPKc' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEmc' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEm' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_eraseEmm' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm' required
by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_' required
by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm' required
by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol
'_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZTTNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE' required by
'/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcmm' required by
'/usr/lib/x86_64-linux-gnu/libIex-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm'
required by
'/usr/lib/x86_64-linux-gnu/libIex-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm' required
by
'/usr/lib/x86_64-linux-gnu/libIex-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_' required
by
'/usr/lib/x86_64-linux-gnu/libIex-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm' required
by
'/usr/lib/x86_64-linux-gnu/libIex-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm' required
by
'/usr/lib/x86_64-linux-gnu/libIlmThread-2_2.so.12->/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22->/usr/local/lib/libopencv_imgcodecs.so.3.3->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_add' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_add_tag' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_clear' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_init' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_query' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol 'th_comment_query_count' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEmc' required by
'/usr/lib/x86_64-linux-gnu/libsnappy.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'
Missing symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm' required
by
'/usr/lib/x86_64-linux-gnu/libsnappy.so.1->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56->/usr/local/lib/libopencv_videoio.so.3.3->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'.

@amroamroamro
Copy link
Collaborator

See the troubleshooting section of the wiki:

https://github.com/kyamagu/mexopencv/wiki/Troubleshooting-(UNIX)#invalid-mex-file-or-segmentation-fault

Basically MATLAB bundles its own (often incompatible) version of some of the libraries that opencv also depends on, which explains the "missing symbol" errors. A possible solution is to force-load incompatible libraries, by preloading the system libs you built opencv against, rather than getting the (usually older) ones bundled with matlab.

As explained in the wiki link above, you would do something like:

$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/lib/x86_64-linux-gnu/libgcc_s.so.1 matlab

(PS: MATLAB lists "GCC C/C++ 4.9.x" as compatible compilers for Linux, but Ubuntu 16.04 comes with gcc-5 by default I believe. That's likely to be a cause of problem too.)

To find out which libraries are conflicting, run ldd on the mex-file both inside MATLAB and outside in the Bash terminal, and look for differences:

# shell
$ ldd /home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64
% MATLAB
>> !ldd /home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64

Sometimes you might need to check second dependencies. For instance:

Missing symbol 'th_comment_add' required by
'/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1
->/usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.56
->/usr/local/lib/libopencv_videoio.so.3.3
->/home/zebrafishbehavior/cv/mexopencv/+cv/private/VideoCapture_.mexa64'

The above error suggests to me some sort of conflict in the Theora lib required by FFmpeg, which in turn is used by the videoio module. You would confirm by comparing:

# shell
$ ldd /usr/local/lib/libopencv_videoio.so.3.3
% MATLAB
>> !ldd /usr/local/lib/libopencv_videoio.so.3.3

As a general tip, you can debug this sort of shared-libraries-loading-problems by using the LD_DEBUG environment variable. Used like:

$ LD_DEBUG_OUTPUT=debug.log LD_DEBUG=all matlab -nodesktop -r "cv.VideoCapture(0); quit;"

@eghbalhosseini
Copy link
Author

eghbalhosseini commented Oct 26, 2017

Thanks, I added the Preload libraries and now the cv.VideoCapture seems to start the camera. However when I try to capture images I get the following error :

libdc1394 error: usb: Bulk transfer 5 failed with code 6

Would you have any suggestion on how to fix this?

@amroamroamro
Copy link
Collaborator

Is this the same camera you mentioned in your other post?
If it is, I'm afraid I don't have experience with industrial cameras nor do I have access to one to test support. You should try asking help on an opencv forum...

What I can suggest is to directly test with C++ code, to see if opencv is capable of grabbing frames from your camera in the first place.

Like I explained before, assuming your camera is supported by OpenCV, you should pick the right backend in the open method, and actually have it enabled at build-time. For instance if your camera is connected using IEEE1394, opencv must be configured with cmake -DWITH_1394=ON ... (with the libdc1394 library installed of course).

Here is an example to get you started:

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main()
{
    // check the "Video I/O" section in the output, make sure your backend is enabled!
    cout << getBuildInformation() << endl;

    VideoCapture cap;
    cap.open(0, cv::CAP_ANY);  // try different backends here
    if (!cap.isOpened()) {
        cerr << "failed to initialize capturing" << endl;
        return 1;
    }
    cout << "Capturing... Press any key to terminate" << endl;
    Mat frame;
    while (true) {
        cap >> frame;
        if (frame.empty()) break;
        imshow("live", frame);
        if (waitKey(5) >= 0) break;
    }
    cap.release();
    return 0;
}

If it doesn't work in C++ either, I would say this an issue/limitation of OpenCV itself, out of control of mexopencv.

@fybaft2012
Copy link

fybaft2012 commented Mar 16, 2018

Hi eghbalhosseini,
Did you solve the Missing symbol problem, I also met the similar errors (#395)

Could you give me help? Thanks!

@thesidjway
Copy link

vlfeat/matconvnet#967 (comment) This issue has a solution that worked for me perfectly.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants