Как связать динамическую библиотеку, которая была построена локально в Xcode10? - PullRequest
0 голосов
/ 07 ноября 2018

Я динамически собирал 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 $@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...