簡體   English   中英

使用opencv時找不到lopencv_core

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM