静态OpenCV库中未定义的引用

时间:2016-10-07 12:14:33

标签: c++ opencv ubuntu static-libraries opencv3.1

我有一个使用OpenCV 3.1的C ++项目,使用共享库可以正常工作。但是现在我想使用静态库(位于项目目录中的一个文件夹中)来编译它,因为我希望能够在没有安装OpenCV的情况下导出它(并在必要时编辑和重新编译)。

这次我重新编译了OpenCV,将共享库设置为NO:

make -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_SHARED_LIBS=NO -DCMAKE_INSTALL_PREFIX=~/Desktop/ocv ..

然后我拿走了我需要的库:

libopencv_core.a   libopencv_imgproc.a    libopencv_highgui.a
libopencv_video.a  libopencv_imgcodecs.a  libopencv_videoio.a

并运行g++ a.cpp libopencv_core.a其中a.cpp是一个示例程序,用于测试一切是否正常:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat a;
    printf("hello world\n" );
    return 0;
}

我的问题是我无法链接第一个库(核心),因为我得到了很多这样的未定义引用:

libopencv_core.a(system.cpp.o): In function `cv::Mutex::Mutex()':
system.cpp:(.text._ZN2cv5MutexC2Ev+0x2c): undefined reference to `pthread_mutexattr_init'
system.cpp:(.text._ZN2cv5MutexC2Ev+0x39): undefined reference to `pthread_mutexattr_settype'
system.cpp:(.text._ZN2cv5MutexC2Ev+0x4c): undefined reference to `pthread_mutexattr_destroy'
libopencv_core.a(system.cpp.o): In function `cv::Mutex::trylock()':
system.cpp:(.text._ZN2cv5Mutex7trylockEv+0x8): undefined reference to `pthread_mutex_trylock'
libopencv_core.a(system.cpp.o): In function `cv::TlsAbstraction::TlsAbstraction()':
system.cpp:(.text._ZN2cv14TlsAbstractionC2Ev+0x9): undefined reference to `pthread_key_create'
libopencv_core.a(system.cpp.o): In function `cv::TlsAbstraction::~TlsAbstraction()':

等等。我到处都搜索过,找不到什么。非常感谢任何帮助。

P.S。 G ++和Ubuntu版本:g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

1 个答案:

答案 0 :(得分:2)

您还需要链接pthread库。并将其传递为-pthread

g++ a.cpp libopencv_core.a -pthread

您缺少包含所需代码的其他库。必须有libippicv.a,其中包含ippicv*函数的代码

g++ a.cpp libopencv_core.a libippicv.a -pthread

它应该位于third_party libs之间。