关于Makefile找不到库

时间:2013-12-11 11:21:31

标签: opencv makefile g++

例外就在这里:

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库。

2 个答案:

答案 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