我有一个使用 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
and ran g++ a.cpp libopencv_core.a
where 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()':
等等。我到处寻找,找不到丢失的东西。任何帮助是极大的赞赏。
附注G++ 和 Ubuntu 版本:g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4