Сейчас я работаю над простым проектом C ++, но моя ситуация немного сложнее. Я использую библиотеку OpenCV, которую я переместил в папку рядом с моим исходным кодом и сослался на нее из Makefile так же, как pkg-config --cflags --libs opencv4
, но просто изменил пути, чтобы они были относительно папки, которую я хочу передать вместе с исходным кодом.
Проблема в том, что после запуска моего Makefile
CC = clang++
CFLAGS = -std=c++17 -g -Wall
SRCS = DisplayImage.cpp
PROG = DisplayImage
OPENCV = -I opencv/include/opencv4/opencv -I opencv/include/opencv4 -L opencv/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
LIBS = $(OPENCV)
$(PROG):$(SRCS)
$(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)
Где я установил флаг -L
. Команда make
работает плавно. Но после вызова ./DisplayImage
я получаю эту ошибку:
dyld: Library not loaded: /usr/local/opt/opencv/lib/libopencv_gapi.4.2.dylib
Referenced from: /Users/user/Downloads/Display_Image3/./DisplayImage
Reason: image not found
Abort trap: 6
Где наиболее важной частью является этот путь /usr/local/opt/opencv/lib/libopencv_gapi.4.2.dylib
, который, как я понимаю, путь по умолчанию для библиотек. Я попытался установить DYLD_LIBRARY_PATH
и `` LD_LIBRARY_PATH```, но он не сработал так же, и выдал мне ту же ошибку.
Обратите внимание, что мне нужно вызвать библиотеку из указанной папки. Спасибо.
РЕДАКТИРОВАТЬ 19/03/20
Для более подробного описания моей ситуации. Я создал программу на компьютере A с установленным OpenCV, но мне нужно запустить эту программу на компьютере, на котором OpenCV не установлен. Итак, на компьютере A я создавал эту программу с помощью следующей команды:
clang++ -std=c++17 -o DisplayImage DisplayImage.cpp -g -v $(pkg-config --cflags --libs opencv4)
Я взял библиотеку OpenCV из папки, на которую указывал pkg-config --cflags --libs opencv4
, переместил ее рядом с моим кодом и переместил весь «репозиторий» на второй компьютер, где я пытаюсь собрать ту же программу с помощью команды:
export DYLD_FALLBACK_LIBRARY_PATH="opencv/lib:$$DYLD_FALLBACK_LIBRARY_PATH" #setting DYLD_FALLBACK_LIB_PATH
clang++ -std=c++17 -g -Wall -o DisplayImage DisplayImage.cpp -I opencv/include/opencv4/opencv -I opencv/include/opencv4 -L opencv/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
#running basically the same command, only replaced $(pkg-config....) with the exact ouput on computer A
После этого программа без проблем собирается, но когда я пытаюсь ее запустить, появляется предыдущая ошибка указание на некоторую библиотеку opencv исчезло, но произошла новая
dyld: Library not loaded: /usr/local/opt/tbb/lib/libtbb.dylib
Referenced from: /Users/user/Downloads/Display_Image3/opencv/lib/libopencv_gapi.4.2.0.dylib
Reason: image not found
Abort trap: 6
И это странно, потому что echo $DYLD_FALLBACK_LIBRARY_PATH
печатает как исключение opencv/lib:1163DYLD_FALLBACK_LIBRARY_PATH
Так что теперь я должен переместить больше библиотек с компьютера? 1041 * A ? Можно ли как-нибудь найти все те библиотеки, на которые есть ссылки? Или есть ли лучшее решение для всей этой ситуации, вместо того, чтобы заставлять пользователя вручную устанавливать библиотеку opencv?