macos 在 64 位 mac 上编译 OpenCV 代码
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5781198/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Compiling OpenCV code on a 64-bit mac
提问by Warpling
I recently inherited some OpenCV code. I installed openCV on my mac, built in in XCode, and then compiled and successfully ran my first openCV "hello world"-ish program.
我最近继承了一些 OpenCV 代码。我在 Mac 上安装了 openCV,内置在 XCode 中,然后编译并成功运行了我的第一个 openCV“hello world”-ish 程序。
Now I'm trying to run the code I was given, but I get errors that lead me to believe it's an issue with the original code being run on a 32-bit Windows system and mine being on a 64-bit Mac.
现在我正在尝试运行我得到的代码,但我得到的错误让我相信这是在 32 位 Windows 系统上运行的原始代码和我在 64 位 Mac 上运行的原始代码的问题。
When I run the Makefile by entering "make"
当我通过输入“make”运行 Makefile 时
CC = g++
CFLAGS =
LDFLAGS = -I/usr/local/include/opencv -lm -lopencv_core -lopencv_highgui -lopencv_video
ALL = vision
all: $(ALL)
vision: vision.o
$(CC) $(LDFLAGS) -o $@ $^
vision.o: vision.cpp
$(CC) $(LDFLAGS) -c $<
.PHONY: clean
clean:
rm -rf *.o core* $(ALL)
I get the following output…
我得到以下输出...
g++ -I/usr/local/include/opencv -lm -lopencv_core -lopencv_highgui -lopencv_video -o vision vision.o
Undefined symbols for architecture x86_64:
"cv::equalizeHist(cv::Mat const&, cv::Mat&)", referenced from:
_main in vision.o
"cv::threshold(cv::Mat const&, cv::Mat&, double, double, int)", referenced from:
_main in vision.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [vision] Error 1
I'm confused; does this mean my install of OpenCV is wrong, the code (those methods specifically) needs to be changed, or something else entirely?
我糊涂了; 这是否意味着我安装的 OpenCV 是错误的,需要更改代码(特别是那些方法),还是其他完全不同的东西?
Note: When I comment out the problem methods from the vision.cpp code, everything compiles just fine.
注意:当我从 vision.cpp 代码中注释掉问题方法时,一切都编译得很好。
回答by karlphillip
Add opencv_imgproc
to your LDFLAGS:
添加opencv_imgproc
到您的 LDFLAGS:
LDFLAGS = -I/usr/local/include/opencv -lm -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc
回答by c9s
Here is a working example:
这是一个工作示例:
CXX = g++
SOURCES = aaa.cpp bbb.cpp
OBJS = $(SOURCES:.cpp=.o)
CXXFLAGS = -I. -I/opt/local/include \
-std=c++11 -stdlib=libc++ \
-g3 -Wall -O0
# -std=c++0x -arch x86_64 -stdlib=libc++ \
LDFLAGS = -L/opt/local/lib -L/usr/lib $(pkg-config --libs --cflags opencv) -lm -ljpeg
LDFLAGS = -L/opt/local/lib -L/usr/lib -I/opt/local/include/opencv -I/opt/local/include -L/opt/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lm -ljpeg
.o:
$(CXX) $(CXXFLAGS) -o $@ -c $^
all: $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o out $(OBJS)
clean:
rm -rf *.o
回答by Barney
You can also have the computer guess you the libraries automatically:
您还可以让计算机自动猜测您的库:
CFLAGS = `pkg-config --cflags opencv`
LDFLAGS = `pkg-config --libs opencv` -lm