[英]lopencv_core not found when using opencv
我通過home-brew安裝opencv3,pkg-config也可以找到連接器
pkg-config --cflags --libs opencv
輸出包含-lopencv_core,但是當我像Make這樣在Makefile中添加它時
CC=clang++
CFLAGS= -Wall -g -std=c++0x
LFLAGS= -I/usr/local/Cellar/opencv3/3.2.0/include -I/usr/local/Cellar/opencv3/3.2.0/bin -I/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_core
CFILES=blah.cpp
HFILES=blah.hpp
OFILES=blah.o
all: main
%.o: %.cpp $(HFILES)
$(CC) -c $(CFLAGS) $< -o $@ $(LFLAGS)
main: $(OFILES) $(HFILES)
$(CC) $(CFLAGS) $(OFILES) -o main $(LFLAGS)
它說
ld: library not found for -lopencv_core
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我應該如何將其鏈接到gcc?
-l
選項查找所提到的庫的常用位置。 它的外觀和外觀因操作系統而異,您沒有提及。 可能可以通過添加-L /usr/local/lib
或其他路徑到您知道庫的位置來修復它。
假設您希望CFLAGS
成為編譯選項並且LFLAGS
成為鏈接的選項,則設置為:
CFLAGS= -Wall -g -std=c++0x
LFLAGS= -I/usr/local/Cellar/opencv3/3.2.0/include -I/usr/local/Cellar/opencv3/3.2.0/bin -I/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_core
很困惑。
-I path
選項對於編譯有意義,對於鏈接沒有意義。 它告訴預處理器在path
搜索源代碼中#include
頭文件。 將有頭文件:
/usr/local/Cellar/opencv3/3.2.0/include
將來沒有頭文件:
/usr/local/Cellar/opencv3/3.2.0/bin
只是可執行文件,與構建程序無關。 並且沒有頭文件:
/usr/local/Cellar/opencv3/3.2.0/lib
只是靜態和/或動態庫。
鏈接器無法找到的庫libopencv_core
可能位於/usr/local/Cellar/opencv3/3.2.0/lib
。 告訴鏈接器在那里搜索庫的方法是:
-L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_core
所以這些設置是有道理的:
CFLAGS := -Wall -g -std=c++0x -I/usr/local/Cellar/opencv3/3.2.0/include
LFLAGS := -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_core
但是,要編譯和鏈接opencv
程序,您可能最好將其保留到pkg-config
以獲得正確的選項:
CFLAGS := -Wall -g -std=c++0x $(shell pkg-config --cflags opencv)
LFLAGS := $(shell pkg-config --libs opencv)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.