Я использую autotools для создания библиотеки, которая включает в себя несколько пользовательских функций, которые основаны на opencv, которые я буду использовать в другом проекте.Autotools с openc (неопределенная ссылка)
Итак, сначала я построить эту библиотеку со следующей структурой:
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)
Я также видел, где opencv.pc, а затем проверяется, что он находится в PKG_CONFIG_PATH.
С этим я запускаю make и устанавливаю без ошибок. До сих пор так идти, но когда я построить простой проект, который включает в себя этот dpf_template.so (через .pc файл) и у меня есть только одна ошибка, которая
libdpf_template.so: undefined reference to `cv::meanShift(cv::_InputArray const&, cv::Rect_<int>&, cv::TermCriteria)'
collect2: error: ld returned 1 exit status
Если не я предложено что-то, когда я строю libdpf_template? Спасибо за помощь.
Я действительно решил это, добавив в src/Makefile.am AM_LDFLAGS = 'pkg-config --libs opencv' – aripod
Возможно, это худшая идея. Да, это работает, для вас, но в большинстве дистрибутивов это сильно испортится, что обеспечит привязку '--as-needed'. У меня нет справки (я много писал об этом, но я не заметил, что в моем блоге хотя бы один), но порядок опций, заданных 'ld', важен, и передавая библиотеки на 'AM_LDFLAGS', они будут отброшены, когда компоновщик использует' -as-needed'. I * сильно * рекомендую вам сделать это правильно, как указано выше. –