J'utilise autotools pour construire une bibliothèque qui incorpore plusieurs fonctions personnalisées basées sur opencv que j'utiliserai dans un autre projet.Autotools avec openc (référence indéfinie)
Alors d'abord je construire cette bibliothèque avec la structure suivante:
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_LIBS = `pkg-config --libs opencv`
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)
J'ai également vu où opencv.pc est et ensuite vérifié qu'il est dans PKG_CONFIG_PATH. Avec ceux-ci, je lance make et make install sans erreur. Alors, allez donc loin, mais quand je construis un projet simple qui comprend ce dpf_template.so (par fichier .pc) et je n'ai qu'une erreur qui est
libdpf_template.so: undefined reference to `cv::meanShift(cv::_InputArray const&, cv::Rect_<int>&, cv::TermCriteria)'
collect2: error: ld returned 1 exit status
je ne devrais pas avoir été invité quelque chose quand je construis le libdpf_template? Merci pour l'aide.
J'ai effectivement résolu cela en ajoutant à src/Makefile.am AM_LDFLAGS = 'pkg-config --libs opencv' – aripod
C'est peut-être une pire idée. Oui, cela fonctionne, pour vous, mais cela échouera sur la plupart des distributions qui appliquent la liaison '-as-needed'. Je n'ai pas de référence à portée de main (j'ai beaucoup écrit à ce sujet, mais je n'ai pas noté ça dans mon blog au moins) mais l'ordre des options données à 'ld' est important, et en passant les bibliothèques à 'AM_LDFLAGS', ils seront rejetés lorsque l'éditeur de liens utilise' --as-needed'. Je * fortement * vous recommande de le faire correctement comme indiqué ci-dessus. –