Autotools with opencv (undefined reference to cv::meanShift)
Hello,
I'm using autotools to build a library that incorporates several custom functions that are based on opencv that I will use in another project.
So first I build this library with the following structure:
src/ (all .cpp files)
dpf-template/ (all .h files)
test/
configure.ac
Makefile.am
dpf_template.pc.in
configure.ac:
AC_PREREQ([2.69])
AC_INIT([calc_mean], [1.0])
AM_INIT_AUTOMAKE([foreign])
AM_MAINTAINER_MODE([enable])
AC_CONFIG_MACRO_DIR([m4])
# Checks for programs.
AC_PROG_CXX
AC_PROG_LIBTOOL
#PKG_CHECK_MODULES([calc_mean])
AC_OUTPUT([Makefile
src/Makefile
test/Makefile
dpf_template.pc])
Makefile.am:
ACLOCAL_AMFLAGS = -I m4
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src test
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = dpf_template.pc
src/Makefile.am
lib_LTLIBRARIES = libdpf_template.la
libdpf_template_la_SOURCES = \ (plus all the files in src/*.cpp and dpf-template/*.h
AM_CPPFLAGS = -I$(top_srcdir) `pkg-config --cflags opencv`
AM_CFLAGS = -g -Wall `pkg-config --cflags opencv` -I/usr/include/eigen3
AM_CXXFLAGS=`pkg-config --cflags opencv`
libdpf_templateincludedir = $(includedir)/dpf_template
libdpf_templateinclude_HEADERS = \ (plus all the files in dpf-template/*.h)
I also saw where opencv.pc is and then checked that it is in PKG_CONFIG_PATH.
With these, I run make and make install with no errors. So far so go, but when I build a simple project that includes this dpf_template.so (through .pc file) and I have only one error which is
libdpf_template.so: undefined reference to `cv::meanShift(cv::_InputArray const&, cv::Rect_<int>&, cv::TermCriteria)'
collect2: error: ld returned 1 exit status
Shouldn't I have been prompted something when I build the libdpf_template? Thanks for the help.
what is the output of
pkg-config --libs opencv
?-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl
I checked in /us/local/lib and they are all there, but as I had installed several versions (I regret that now....) I have this:
Which is a mess and I cannot run make uninstall. Would it be safe to remove all of them and install one version (2.4.12)?
idk. your pkg-config seems to pick some 2.4 version (looking at the lib names)
which is what I want.....but maybe meanShift is in another library from 2.4.10 and 2.4.12 and that's causing the problem? Because all the other opencv functions work...I commented it the call to meanShift and the code compiled.
I run
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
and re-compiled opencv2.4-12 but the problem still shows up.....undefined reference to `cv::meanShift