Я компилирую некоторый исходный код, который требует некоторых dylib из другого проекта, который я уже создал. Я получаю
ld: символ (-ы) не найден для архитектуры x86_64`
Всякий раз, когда я выполняю
g++ some_code.cpp -I/usr/local/include -o executable_binary
Я знаю, что g++
не может найти скомпилированные dylib (установленные в /usr/local/include
), так как в этой ошибке также упоминается множество конкретных символов, которые являются частью dylib.
Я уже пробовал это:
- Выполнение
install_name_tool -id "@/usr/local/lib/requiredlib.dylib" /usr/local/lib/requiredlib.dylib
- Добавление
-L/usr/local/lib
в параметры компиляции. - Добавление всех путей dylib явно к параметрам компиляции.
- Попробуйте добавить
DYLD_LIBRARY_PATH
неудачно, так как Sierra не позволяет установить эту переменную по соображениям безопасности.
Я знаю, что возможно добавить DYLD_LIBRARY_PATH
, но для этого необходимо отключить SIP. Я могу это сделать, я не хочу, чтобы сделать это более чистым способом.
P.S.: Я пытаюсь скомпилировать примеры учебников для библиотеки графа тюльпанов.
Пропущенные символы связаны с библиотекой графиков, которую я установил. Сообщение об ошибке:
Undefined symbols for architecture x86_64:
"tlp::saveGraph(tlp::Graph*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, tlp::PluginProgress*)", referenced from:
_main in tutorial001-02ee7e.o
"operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, tlp::Graph const*)", referenced from:
_main in tutorial001-02ee7e.o
ld: symbol(s) not found for architecture x86_64
Всякий раз, когда я делаю ls /usr/local/lib/requiredlib.dylib
, все скомпилированные библиотеки из Tulip существуют.
g++ -v
производит:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
После выполнения ls /usr/local/include/tulip/
я получаю список файлов *.h
библиотек, которые я намерен использовать.