2013-12-11 55 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