[英]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.