c++ - 带 openc 的自动工具(未定义引用)

标签 c++ opencv makefile autotools automake

我正在使用 autotools 构建一个库,其中包含几个基于 opencv 的自定义函数,我将在另一个项目中使用这些函数。

所以首先我用以下结构构建这个库:

src/ (all .cpp files)
dpf-template/ (all .h files)
test/
configure.ac
Makefile.am
dpf_template.pc.in

配置文件:

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])

生成文件.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 和 make install 没有错误。到目前为止,但是当我构建一个包含此 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 时,我不应该得到一些提示吗? 感谢您的帮助。

最佳答案

AM_LIBS 不是您想象的那样(仅适用于二进制文件),您不应该那样使用 pkg-config

您应该使用 PKG_CHECK_MODULES 宏来定义 OPENCV_LIBSOPENCV_CFLAGS 并引用这些变量。

# in configure.ac
PKG_CHECK_MODULES([OPENCV], [opencv])

# in Makefile.am
AM_CFLAGS = -Wall
AM_CPPFLAGS = $(OPENCV_CFLAGS) -I $(top_srcdir) -I /usr/include/eigen3
libdpf_template_la_LIBADD = $(OPENCV_LIBS)

有关使用 PKG_CHECK_MODULES 的更多信息,我可以向您推荐我的 Autotools Mythbuster对此有完整的解释。

关于c++ - 带 openc 的自动工具(未定义引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197805/

相关文章:

c++ - 在子类之外实现函数导致未知错误

c++ - 在 VS2008 项目中为每个输入文件指定多个构建规则/工具

c++ - 在允许并行性的情况下用 STL 算法替换 for 循环

c++ - SURF/SIFT 的开源替代品

c++ - opencv - 图像乘法

php - 如何在 Mac OS X (10.9.4) 中修复 'PHP' make?

c++ - 使用if语句对3个数字排序

python - 如何使用大于 2 GB 的 OpenCV 编写 avi 文件?

linux - 求助,不知道如何制作这个Makefile

由于权限错误,C++ 编译器输出未运行