我已经看到许多解决该问题的方法,但是没有人帮助过我。
我试图在 Makefile 中添加opencv_imgcodecs
,使用cmake
等。
Makefile.config
CPU_ONLY := 1
OPENCV_VERSION := 3
CUSTOM_CXX := g++
CUDA_DIR := /usr/local/cuda
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
BLAS := atlas
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/lib
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
TEST_GPUID := 0
Q ?= @
当我执行make all
时,我在输出中收到下一个错误:
CXX/LD -o .build_release/tools/extract_features.bin
.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::String::allocate(unsigned long)'
.build_release/lib/libcaffe.so: undefined reference to `cv::String::deallocate()'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
collect2: error: ld returned 1 exit status
Makefile:635: recipe for target '.build_release/tools/extract_features.bin' failed
make: *** [.build_release/tools/extract_features.bin] Error 1
Ubuntu 18.04。 那是我使用的最新指南Here
根据输出判断:
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
CXX tools/extract_features.cpp
CXX/LD -o .build_release/tools/extract_features.bin
.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
似乎我们要使用动态库libcaffe.so
,并在使用它与extract_features.bin
进行交互之后。如果您要学习libcaffe.so
的编译内容,也许可以在任何源文件中包含OpenCV连接。
但是我不知道如何确定用于创建libcaffe.so
的源文件。
我试图查看Makefile,感觉好像他被弄糊涂了一样,不清楚。
答案 0 :(得分:0)
问题与opencv版本有关。 我引用:
错误与如何编译无关,如果我们进行更改,则什么也不会发生 Makefile或CMakeLists.txt。由OpenCV模块引起的错误 版本3和4中的版本已更改。
要修复此问题,请在每个要生成的错误文件中
在#ifdef USE_OPENCV部分中,添加:
#include“ opencv2 / imgcodecs / imgcodecs.hpp”
所以它看起来像这样:
#ifdef USE_OPENCV #include
#include #include #include #include“ opencv2 / imgcodecs / imgcodecs.hpp”然后,具有代码的文件:cv_img = cv :: imread(image.first,CV_LOAD_IMAGE_COLOR); 更改为:cv_img = cv :: imread(image.first,cv :: IMREAD_COLOR);
以及其他具有以下内容的文件:
int cv_read_flag =(is_color?CV_LOAD_IMAGE_COLOR: CV_LOAD_IMAGE_GRAYSCALE);更改为:
int cv_read_flag =(is_color?cv :: IMREAD_COLOR: cv :: IMREAD_GRAYSCALE);
找到了解决方案here。