我通过 home-brew 安装了 opencv3,pkg-config 也可以找到链接器
pkg-config --cflags --libs opencv
输出包含 -lopencv_core,但是当我像这样在 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?
最佳答案
假设您希望 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)
关于c++ - 使用 opencv 时找不到 lopencv_core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405134/