Ask Your Question

Ubuntu 12.04 64 bit gcc linking problem with static openCV libraries

asked 2014-01-18 03:02:20 -0500

erotavlas gravatar image

updated 2014-01-18 03:07:55 -0500

berak gravatar image


I'm trying to compile my code in static way. I know that gcc is able to do that with the flag -static and that the only thing that I need is the static version of all the library (.a). I installed openCV following the official guide of Ubuntu and I installed the latest available version of openCV 2.4.8. The only thing that I changed is the flag that enables static compilation -DBUILD_SHARED_LIBS=OFF.

Now I have problem about the compilation of my code. During the linking phase, the linker is not able to find some library even if the library are present in their paths. My command is this

g++ -static example.cpp -L/usr/local/lib -lopencv_highgui -lopencv_imgproc -lopencv_core -o example

The code of the example is taken from the website of Ubuntu It works in case of shared compilation.

[CODE] include<opencv2 highgui="" highgui.hpp=""> int main() { IplImage* img = cvLoadImage("/home/USER/Pictures/python.jpg",CV_LOAD_IMAGE_COLOR); cvNamedWindow("opencvtest",CV_WINDOW_AUTOSIZE); cvShowImage("opencvtest",img); cvWaitKey(0); cvReleaseImage(&img); return 0; } [/CODE]

The message that I receive from the linker is very long, I reported only the first error:

/usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In function GuiReceiver::~GuiReceiver()': window_QT.cpp:(.text._ZN11GuiReceiverD2Ev+0x49): undefined reference toQObject::~QObject()' window_QT.cpp:(.text._ZN11GuiReceiverD2Ev+0x3e): undefined reference to QObject::~QObject()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionCvWinModel::~CvWinModel()': window_QT.cpp:(.text._ZN10CvWinModelD2Ev[_ZN10CvWinModelD5Ev]+0x19): undefined reference to QWidget::~QWidget()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionCvWinModel::~CvWinModel()': window_QT.cpp:(.text._ZN10CvWinModelD0Ev[_ZN10CvWinModelD0Ev]+0x1d): undefined reference to QWidget::~QWidget()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionOpenGlViewPort::sizeHint() const': window_QT.cpp:(.text._ZNK14OpenGlViewPort8sizeHintEv+0x21): undefined reference to QWidget::sizeHint() const' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionCvWindow::keyPressEvent(QKeyEvent)': window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x14): undefined reference to QTest::keyToAscii(Qt::Key)' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x27): undefined reference toQKeyEvent::modifiers() const' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x3f): undefined reference to QMutex::lock()' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x4e): undefined reference toQMutex::unlock()' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x5a): undefined reference to QWaitCondition::wakeAll()' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x65): undefined reference toQWidget::keyPressEvent(QKeyEvent)' window_QT.cpp:(.text._ZN8CvWindow13keyPressEventEP9QKeyEvent+0x7c): undefined reference to QKeyEvent::nativeVirtualKey() const' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionOpenGlViewPort::setSize(QSize)': window_QT.cpp:(.text._ZN14OpenGlViewPort7setSizeE5QSize+0x5): undefined reference to QWidget::updateGeometry()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionOpenGlViewPort::~OpenGlViewPort()': window_QT.cpp:(.text._ZN14OpenGlViewPortD2Ev+0x28): undefined reference to QGLWidget::~QGLWidget()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionOpenGlViewPort::makeCurrentOpenGlContext()': window_QT.cpp:(.text._ZN14OpenGlViewPort24makeCurrentOpenGlContextEv+0x1): undefined reference to QGLWidget::makeCurrent()' /usr/local/lib//libopencv_highgui.a(window_QT.cpp.o): In functionOpenGlViewPort::updateGl()': window_QT.cpp:(.text._ZN14OpenGlViewPort8updateGlEv+0x1): undefined reference to `QGLWidget::updateGL()'

I think that the problem is the order in which I pass the libraries to the linker ... (more)

edit retag flag offensive close merge delete


you're not linking any Qt libs.

(the 'dynamic' version of opencv_highgui would do this automaically, but now, that you're linking statically, you have to do that on your own)

berak gravatar imageberak ( 2014-01-18 03:11:07 -0500 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2014-01-18 18:43:47 -0500

keghn gravatar image

updated 2014-01-18 18:45:22 -0500


g++ pro.cpp -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -lopencv_core -lopencv_ml -lopencv_features2d -lopencv_objdetect -lopencv_flann -lopencv_video -lopencv_highgui -o pro

It was a BBBBEEEEEiiiiiiiCCCCHHHHH installing then is was a nightmare compiling code. cmake install cmake to compile code. Cmake dose not work that well!!!!!!!!!!!!!!!!!!!!!!!!!!! for anything!!!!!

I use this to compile my code:

    "g++ p.cpp -o p `pkg-config --cflags --libs opencv`"

This web site help allot:

Could not find my .bash_profile so I just type the each line into the terminal:



I run it with:


or if i am to supply an image:

./pro butterfly.jpg

#include <opencv2/objdetect/objdetect.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv/highgui.h>

#include <ostream>

#include <stdio.h>

#include <stdlib.h>

using namespace cv;

using namespace std;

In old code i replace includes with the above and it work fine and as well with the new stuff.

Good luck,


edit flag offensive delete link more


your sloppy answer has got nothing to do with the problem

berak gravatar imageberak ( 2014-01-19 03:37:03 -0500 )edit

Question Tools


Asked: 2014-01-18 03:02:20 -0500

Seen: 1,805 times

Last updated: Jan 18 '14