例外就在这里:
g++ -L/usr/local/lib -I./include -I. -lopencv_core -lopencv_highgui -lopencv_imgproc main.o ColorTransfer.o
main.o: In function `showImg(std::string, cv::Mat, int)':
main.cpp:(.text+0x21): undefined reference to `cv::namedWindow(std::string const&, int)'
main.cpp:(.text+0x34): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
main.cpp:(.text+0x75): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
main.cpp:(.text+0x9d): undefined reference to `cv::waitKey(int)'
main.o: In function `main':
Makefile 就在这里:
CC=g++
FLAGS=-L./lib -I./include -I. -lopencv_core -lopencv_highgui -lopencv_imgproc
all: ColorTransfer
ColorTransfer: main.o ColorTransfer.o
$(CC) $(FLAGS) main.o ColorTransfer.o -o ColorTransfer
main.o: main.cpp
$(CC) $(FLAGS) -c main.cpp -o main.o
ColorTransfer.o: ColorTransfer.cpp ColorTransfer.h
$(CC) $(FLAGS) -c ColorTransfer.cpp -o ColorTransfer.o
clean :
rm -rf main.o ColorTransfer.o
当前目录包含名为lib的目录,该目录具有opencv库。
答案 0 :(得分:0)
在您的文件夹中:
/lib
你必须确保有:
opencv_core.so
opencv_highgui.so
opencv_imgproc.so
并且您的LD_LIBRARY_PATH指向此文件夹。否则,你要导出它:
export LD_LIBRARY_PATH=/lib
您是否下载了opencv源或预编译?您是否配置了动态链接器运行时绑定?
sudo ldconfig
否则,请尝试检查out此解决方案!
答案 1 :(得分:0)
你真的要注意g++
的论据顺序;它很重要(图书馆应该排在最后 - 最高级别到最低级别)。
使用make -p
了解make
已知的规则....然后按照以下方式改进Makefile
CXX=g++
CXXFLAGS= -I./include -I. -g -Wall
LDLIBS= -L./lib -lopencv_core -lopencv_highgui -lopencv_imgproc
all: ColorTransfer
ColorTransfer: main.o ColorTransfer.o
$(LINK.cc) $^ $(LDLIBS) -o $@
# etc....
我让您更正Makefile
的其他行...另请参阅this answer ...
我更正了上面的制作规则:$^
必须在$(LDLIBS)
之前!
BTW,remake是一个调试Makefile
的好工具。例如,remake -x