关于 Makefile 找不到库 [英] About Makefile can't find libraries

查看:52
本文介绍了关于 Makefile 找不到库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例外在这里:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆