opencv - 对预编译的 opencv 2.4 的未定义引用
问题描述
我正在尝试构建一个使用我自己编译的 opencv 库的 cpp 应用程序。
这是我的 Makefile:
APP = appname
APP_OBJS = appname.o
OPENCV_DIR = /{path}/project-spec/meta-user/recipes-apps/opencv-vs/files
OPENCV_LIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
CC = g++
CXXFLAGS += -std=c++11
all: build install
build: $(APP)
$(APP): $(APP_OBJS)
$(CXX) -o $@ $(LDFLAGS) -L$(OPENCV_DIR)/lib $(OPENCV_LIBS) $(APP_OBJS) $(LDLIBS)
clean:
-rm -f $(APP) *.elf *.gdb *.o
.PHONY: install image
install: $(APP)
$(TARGETINST) -d $(APP) /bin/$(APP)
%.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) -I$(OPENCV_DIR)/include -I$(LIBISS_DIR)
lib文件示例:
$ file libopencv_stitching.so.2.4.11
libopencv_stitching.so.2.4.11: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped
在我的头文件中,我包括:
#include "opencv2/opencv.hpp"
#include "opencv2/nonfree/nonfree.hpp"
当我运行petalinux-build -c appname或make appname我得到:
| appname.cpp:419: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
| appname.cpp:419: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
| ...core.hpp:2219: undefined reference to `cv::noArray()
| /path/include/opencv2/core/operations.hpp:2607: undefined reference to `cv::fastFree(void*)'
| etc
| etc
| etc
| collect2: error: ld returned 1 exit status
| ERROR: oe_runmake failed
| make: *** [Makefile:24: appname] Error 1
知道为什么吗?
我目前正在从 Petalinux 2015 迁移到 2018,它在 2015 年运行良好。
解决方案
对于链接器,参数的顺序可能很重要。尝试
$(APP): $(APP_OBJS)
$(CXX) -o $@ $(LDFLAGS) $(APP_OBJS) -L$(OPENCV_DIR)/lib $(OPENCV_LIBS) $(OPENCV_LIBS) $(LDLIBS)
这不是错字,我有意识地输入了
$(OPENCV_LIBS)
两次,主要是因为我不想开始寻找 OpenCv 库的正确(反向依赖)顺序。
推荐阅读
- symfony - Symfony 2.3.1 - 将标签排列成两行
- python - 使用 pandas 数据透视表创建值条目的百分比细分
- c# - C#从文件中解密字节[]时出错
- python - Spyder 中的 Runcell 无法使用拆分窗格
- excel - 如何使此函数遍历两个范围?
- python - 如何过滤掉包含 NaN 或 '-' 的行?
- apache-spark - 在Java Spark中重新分区后如何找出每个分区中的项目
- javascript - VUE:如何在 CSS 模块中使用 prop?
- angular - 为什么在更新到 Angular 8 后将 eventlistner 添加到我的动态创建的图像中会在页面加载时触发
- node.js - 从 mongodb 获取最新记录,如果这两条记录相同但时间不同