Неопределенные ссылки в статических библиотеках OpenCV

У меня есть проект на C ++, который использует OpenCV 3.1 и прекрасно работает с использованием общих библиотек. Но теперь я хочу скомпилировать его, используя статические библиотеки (расположенные в папке в каталоге проекта), потому что я хочу иметь возможность экспортировать его (а также редактировать и перекомпилировать, если необходимо), где 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()':

и так далее. Я искал по всему и не могу найти то, что не хватает. Любая помощь с благодарностью.

постскриптум Версия G ++ и Ubuntu: g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

1

Решение

Вам также необходимо связать библиотеку pthread. И передать это как -pthread

g++ a.cpp libopencv_core.a -pthread

Вам не хватает других библиотек, которые содержат необходимый код. Там должно быть libippicv.a который содержит код для ippicv* функции

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

Это должно быть где-то среди третьих сторон.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector