关于 Makefile 找不到库 [英] About Makefile can't find libraries
问题描述
例外在这里:
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库.
And current directory contains directory named lib, which has opencv libraries.
推荐答案
你真的应该注意 g++
的参数顺序;这很重要(图书馆应该以良好的顺序排在最后 - 从最高级别到最低级别).
You really should pay attention to the order of arguments to g++
; it matters a lot (libraries should go last in good order - highest level to lowest level).
使用 make -p
来了解 make
已知的规则......然后改进你的 Makefile
如下
Use make -p
to learn about rules known to make
.... Then improve your Makefile
as follow
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
的其他行......另见 这个答案一个> ...
I leave you to correct the other lines of your Makefile
... See also this answer ...
我更正了上面的 make 规则:$^
必须在 $(LDLIBS)
之前!
I corrected my make rules above : $^
has to be before $(LDLIBS)
!
顺便说一句,remake 是一个很好的调试工具 Makefile
-s;例如,使用 remake -x
BTW, remake is a nice tool to debug Makefile
-s; for instance, with remake -x
这篇关于关于 Makefile 找不到库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!