Başka bir projede kullanacağım opencv temelli birkaç özel işlev içeren bir kitaplık oluşturmak için autotools kullanıyorum.openc ile Autotools (tanımsız başvuru)
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
Bu nedenle ilk önce aşağıdaki yapıya sahip bu kütüphane kurmak
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)
Ayrıca opencv.pc'in nerede olduğunu gördükten sonra PKG_CONFIG_PATH içinde olduğunu kontrol ettim.
Bunlar ile hata yapmadan yükleme ve yükleme işlemini çalıştırıyorum. Buraya kadar her şey gider, ama ben (.pc dosyası üzerinden) bu dpf_template.so içeren basit bir proje oluşturmak ve ne zaman ı oluştururken
libdpf_template.so: undefined reference to `cv::meanShift(cv::_InputArray const&, cv::Rect_<int>&, cv::TermCriteria)'
collect2: error: ld returned 1 exit status
şey istenmiş gerekmiyor sadece bir hata var libdpf_template? Yardım için teşekkürler.
Bunu gerçekten src/Makefile.am ekleyerek çözdüm AM_LDFLAGS = 'pkg-config --libs opencv' – aripod
Bu muhtemelen daha kötü bir fikir. Evet, sizin için çalışıyor, ancak '--as-need' bağlantısını zorlayan dağıtımların çoğunda kötü bir şekilde başarısız olur. Elimde bir referansım yok (bununla ilgili çok şey yazdım, ancak blogumda en az bir kere not almamıştım) ancak ld'ye verilen seçeneklerin sırası önemlidir ve kütüphaneleri "AM_LDFLAGS", linker '--as-needed 'kullanıldığında atılacaklar. I * şiddetle * yukarıda belirtildiği gibi düzgün bir şekilde yapmanızı öneririz. –