Я динамически собирал openCV и другие библиотеки локально. Эти библиотеки включены в проект C ++. Я использую Makefile
для компиляции проекта. В Makefile
для использования библиотек я использую некоторые флаги: -L
для указания на папку, в которой динамические библиотеки затем -l
для каждой включаемой динамической библиотеки и -I
для включения заголовков.
Для некоторых библиотек pkg-config
сделан доступным, поэтому он еще проще.
После сборки для запуска программы мне также необходимо экспортировать библиотеку с помощью команды терминала export
:
export DYLD_LIBRARY_PATH=../cmake_bin_dir/instDir/lib/:../poco/instDir/lib/
echo $DYLD_LIBRARY_PATH
Я хочу использовать Xcode для этого проекта. Единственный шаг, который мне удалось выполнить, - это включить заголовки.
Как я могу динамически связать локально созданную библиотеку в XCode? Какие шаги должны быть эквивалентны тем, которые в Makefile
должны быть выполнены?
Например, это ошибка, которую я получаю:
Ld /Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Products/Debug/MyProject2 normal x86_64 (in target: MyProject2)
cd /Users/user/Documents/XCodeMyProject/MyProject2
export MACOSX_DEPLOYMENT_TARGET=10.13
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -L/Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Products/Debug -L/Users/user/Downloads/openCVProject/SDL2-2.0.8/build/lib -L/Users/user/Downloads/openCVProject/cmake_bin_dir/instDir/lib -L/Users/user/Downloads/openCVProject/SDL2-2.0.8/build/lib -L/Users/user/Downloads/openCVProject/poco/instDir/lib -L/Users/user/Downloads/openCVProject/jsoncpp/build/lib -F/Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Products/Debug -filelist /Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Intermediates.noindex/MyProject2.build/Debug/MyProject2.build/Objects-normal/x86_64/MyProject2.LinkFileList -mmacosx-version-min=10.13 -Xlinker -object_path_lto -Xlinker /Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Intermediates.noindex/MyProject2.build/Debug/MyProject2.build/Objects-normal/x86_64/MyProject2_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -stdlib=libc++ -lSDL2 -lopencv_calib3d.4.0.0 -lopencv_calib3d.4.0.0 -lopencv_calib3d.4.0.0 -lopencv_core.4.0.0 -lopencv_core.4.0.0 -lopencv_core.4.0.0 -lopencv_dnn.4.0.0 -lopencv_dnn.4.0.0 -lopencv_dnn.4.0.0 -lopencv_features2d.4.0.0 -lopencv_features2d.4.0.0 -lopencv_features2d.4.0.0 -lopencv_flann.4.0.0 -lopencv_flann.4.0.0 -lopencv_flann.4.0.0 -lopencv_highgui.4.0.0 -lopencv_highgui.4.0.0 -lopencv_highgui.4.0.0 -lopencv_imgcodecs.4.0.0 -lopencv_imgcodecs.4.0.0 -lopencv_imgcodecs.4.0.0 -lopencv_imgproc.4.0.0 -lopencv_imgproc.4.0.0 -lopencv_imgproc.4.0.0 -lopencv_ml.4.0.0 -lopencv_ml.4.0.0 -lopencv_ml.4.0.0 -lopencv_objdetect.4.0.0 -lopencv_objdetect.4.0.0 -lopencv_objdetect.4.0.0 -lopencv_photo.4.0.0 -lopencv_photo.4.0.0 -lopencv_photo.4.0.0 -lopencv_shape.4.0.0 -lopencv_shape.4.0.0 -lopencv_shape.4.0.0 -lopencv_stitching.4.0.0 -lopencv_stitching.4.0.0 -lopencv_stitching.4.0.0 -lopencv_superres.4.0.0 -lopencv_superres.4.0.0 -lopencv_superres.4.0.0 -lopencv_video.4.0.0 -lopencv_video.4.0.0 -lopencv_video.4.0.0 -lopencv_videoio.4.0.0 -lopencv_videoio.4.0.0 -lopencv_videoio.4.0.0 -lopencv_videostab.4.0.0 -lopencv_videostab.4.0.0 -lopencv_videostab.4.0.0 -Xlinker -dependency_info -Xlinker /Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Intermediates.noindex/MyProject2.build/Debug/MyProject2.build/Objects-normal/x86_64/MyProject2_dependency_info.dat -o /Users/user/Library/Developer/Xcode/DerivedData/MyProject2-cfkbveclaeyyswbyyzjdzbcpreoz/Build/Products/Debug/MyProject2
Над ним показана команда -L/Users/user/Downloads/openCVProject/SDL2-2.0.8/build/lib
, в которой указанный путь содержит файлы libSDL2.dylib libSDL2d.dylib pkgconfig
. Единственная проблема может заключаться в том, что -lSDL2
повторяется дважды.a
Вот здесь я использую make-файл:
CXX = g++
CXXFLAGS = -std=c++11
INC_PATH = `pkg-config --cflags ../cmake_bin_dir/instDir/lib/pkgconfig/opencv.pc` \
`pkg-config --cflags ../SDL2-2.0.8/build/lib/pkgconfig/sdl2.pc` \
`pkg-config --cflags ../jsoncpp/build/pkg-config/jsoncpp.pc` \
-I ../poco/instDir/include/
#LIB_PATH = -L../cmake_bin_dir/lib/ ./gainput/build/lib -L../SDL2-2.0.8/build/ -L../SDL2-2.0.8/build/lib
LIBS = `pkg-config --libs ../cmake_bin_dir/instDir/lib/pkgconfig/opencv.pc` \
`pkg-config --libs ../SDL2-2.0.8/build/lib/pkgconfig/sdl2.pc` \
`pkg-config --libs ../jsoncpp/build/pkg-config/jsoncpp.pc` \
-L../poco/instDir/lib/ -lPocoNetd -lPocoUtild -lPocoFoundationd
SOURCEDIR := ./
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
clean:
$(RM) $(OBJECTS) $(DEPENDS) parking
# Linking the executable from the object files
parking: $(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 $@