Компиляция кода OpenCV на 64-битном Mac - PullRequest
6 голосов
/ 25 апреля 2011

Я недавно унаследовал некоторый код OpenCV. Я установил openCV на своем Mac, встроил в XCode, а затем скомпилировал и успешно запустил мою первую openCV программу "hello world" .ish.

Теперь я пытаюсь запустить код, который мне дали, но я получаю ошибки, из-за которых я полагаю, что проблема заключается в том, что исходный код запускается в 32-битной системе Windows, а мой - на 64-битном Mac .

Когда я запускаю Makefile, вводя "make"

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)

Я получаю следующий вывод ...

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

Я в замешательстве; Означает ли это, что моя установка OpenCV неверна, код (особенно эти методы) должен быть изменен, или что-то еще полностью?

Примечание. Когда я закомментирую методы проблемы из кода vision.cpp, все прекрасно скомпилируется.

Ответы [ 3 ]

16 голосов
/ 25 апреля 2011

Добавьте opencv_imgproc к вашим LDFLAGS:

LDFLAGS = -I/usr/local/include/opencv -lm -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc
3 голосов
/ 20 июля 2014

Вот рабочий пример:

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
1 голос
/ 21 ноября 2012

Компьютер также может автоматически угадывать библиотеки:

CFLAGS = `pkg-config --cflags opencv` 
LDFLAGS = `pkg-config --libs opencv` -lm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...