2013-12-11 58 views
0

异常是在这里: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的库。

+0

'make'正在做你*错误*要求做的事情。但'g ++'在你的'Makefile'中被错误地调用;它不是'make',而是'g ++',它不能找到库... –

回答

0

在你的文件夹:

/lib 

你必须确保有:

opencv_core.so 
opencv_highgui.so 
opencv_imgproc.so 

并且您的LD_LIBRARY_PATH指向此文件夹。否则,您必须将其导出:

export LD_LIBRARY_PATH=/lib 

您是否下载了opencv源代码或进行了预编译?你配置了动态链接器运行时绑定吗?

sudo ldconfig 

编辑

否则,尝试检查out这soloution!

+0

谢谢。是的,我已经使用IDE(Eclipse + CDT)运行代码,但我想使用Makefile编译代码。我尝试了你的建议,但它也行不通。 – cstur4

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 [email protected] 

# etc.... 

我离开你纠正你Makefile的其他线路...又见this answer ...

我纠正了我上面的制作规则:$^必须在$(LDLIBS)之前!

顺便说一句,remake是一个很好的工具来调试Makefile-s;例如,与remake -x