Я пытаюсь построить и запустить проект, над которым я работаю. Я продолжаю строить и все замечательно, никаких ошибок. Затем, когда я пытаюсь запустить исполняемый файл, я получаю сообщение об ошибке, что некоторые из динамических библиотечных зависимостей не могут быть найдены:
dyld: Library not loaded: libgpr.dylib
Referenced from: ./test-exec
Reason: image not found
Trace/BPT trap: 5
Интересно. Что значит otool -l
отчет?
... snip ...
Load command 11
cmd LC_MAIN
cmdsize 24
entryoff 1247184
stacksize 0
Load command 12
cmd LC_LOAD_DYLIB
cmdsize 104
name /abs/path/to/libprotobuf.10.dylib (offset 24) <--- The same path as passed to the linker
time stamp 2 Wed Dec 31 19:00:02 1969
current version 11.0.0
compatibility version 11.0.0
Load command 13
cmd LC_LOAD_DYLIB
cmdsize 40
name libgpr.dylib (offset 24) <--- Note the local path
time stamp 2 Wed Dec 31 19:00:02 1969
current version 0.0.0
compatibility version 0.0.0
Что дает? Мой вызов сборки (после некоторой очистки), как испускается CMake:
Компиляция (новые строки для удобства чтения)
cd /path/to/project && /path/to/c++
-Wno-inconsistent-missing-override -g -fPIE
-I/path/to/project -I/googletest/headers
-I/googlemock/headers
-I/path/to/project/usr/include
-I/include
-I/path/to/jni/Contents/Home/include
-I/path/to/jni/Home/include/darwin
-std=gnu++11 -o test-exec.o -c
/path/to/project/test-exec.cc
Ссылка на сайт:
cd /path/to/project && /usr/local/Cellar/cmake/3.2.2/bin/cmake -E cmake_link_script CMakeFiles/test-exec.dir/link.txt --verbose=1
/path/to/c++
-Wno-inconsistent-missing-override -g
-Wl,-search_paths_first
-Wl,-headerpad_max_install_names
test-exec.o -o test-exec
/path/to/libprotobuf.dylib
/path/to/libgpr.dylib
/path/to/libgrpc.dylib
/path/to/libgrpc++.dylib
../../dep1.a
../../dep2.a
/path/to/libgmock.a
/path/to/libgmock_main.a
/path/to/libgtest_main.a
Насколько я могу сказать, оба libprotobuf.dylib
а также libgpr.dylib
передаются как абсолютные пути на этапе соединения. Как так libprotobuf.dylib
загружается по абсолютному пути, а не libgpr.dylib
?
Для чего стоит установка DYLD_LIBRARY_PATH
заставляет это работать, но я не хочу устанавливать это или экспортировать это. Я настроил репозиторий, чтобы построить все зависимости и поместить их в определенный каталог, он должен быть просто клонировать и построить.
Моя версия компилятора:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ --version
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
Задача ещё не решена.
Других решений пока нет …