c++ - 使用 opencv 时找不到 lopencv_core

标签 c++ opencv gcc makefile linker

我通过 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/

相关文章:

c++ - 连接四个位板

C++ 模板化模板推导可以回避吗?

c++ - 如何在 C++ 中删除集合或如何将集合的大小调整为 0

python - 使用openCV python在相同颜色的图像周围绘制轮廓

c++ - 使用内联汇编程序从 GCC 中的共享库调用函数

objective-c - 如何编译在 Windows 上使用 NSApplication 的 GNUstep 应用程序?

c++ - 如何从对象调用我的设置回调函数?

opencv - Haar Cascade 与 Hog 检测

c++ - 使用多个连续观测变量的隐马尔可夫模型

gcc - 当 GNU make 更新 .d 文件时,确切的事件链是什么?