Как я могу статически связать библиотеку OpenCV с моим проектом? - PullRequest
0 голосов
/ 14 сентября 2018

Я скомпилировал библиотеку OpenCV вручную, чтобы получить файлы статической библиотеки (*.a в OSX) с помощью команд:

cmake -D CMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=OFF -D CMAKE_INSTALL_PREFIX=./instDir/ ../openCV/
make -j8
make install

Затем я хочу иметь автономный исполняемый файл из моего исходного кода C ++, поэтому я создал следующее Makefile:

CXX = g++

CXXFLAGS = -std=c++11
INC_PATH = `pkg-config --cflags ../cmake_bin_dir_static/instDir/lib/pkgconfig/opencv.pc`     


LIBS =  `pkg-config --libs --static ../cmake_bin_dir_static/instDir/lib/pkgconfig/opencv.pc`

SOURCEDIR := ../project/
SOURCES := $(wildcard $(SOURCEDIR)/*.cpp)
OBJDIR=$(SOURCEDIR)/obj

OBJECTS := $(patsubst $(SOURCEDIR)/%.cpp,$(OBJDIR)/%.o,$(SOURCES))
DEPENDS := $(patsubst $(SOURCEDIR)/%.cpp,$(OBJDIR)/%.d,$(SOURCES))

# ADD MORE WARNINGS!
WARNING := -Wall -Wextra

# .PHONY means these rules get executed even if
# files of those names exist.
.PHONY: all clean

# The first rule is the default, ie. "make",
# "make all" and "make parking" mean the same
all: parking_static

clean:
    $(RM) $(OBJECTS) $(DEPENDS) parking_static

# Linking the executable from the object files
parking_static: $(OBJECTS)
    $(CXX) $(WARNING) $(CXXFLAGS) $(INC_PATH) $^ -o $@ $(LIBS)

-include $(DEPENDS)

$(OBJDIR):
    mkdir -p $(OBJDIR)

$(OBJDIR)/%.o: $(SOURCEDIR)/%.cpp Makefile $(OBJDIR)
    $(CXX) $(WARNING) $(CXXFLAGS) $(INC_PATH) -MMD -MP -c $< -o $@

Значение Makefile должно быть правильным, поскольку оно компилируется без флага --static. Однако, когда он присутствует, я получаю ошибку:

ld: library not found for -lAccelerate.framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [parking_static] Error 1

Как я могу статически связать библиотеку OpenCV с моим проектом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...