Вы указываете -static
, что означает:
-static Produces a mach-o file that does not use the dyld. Only used
building the kernel.
dyld
- это динамический загрузчик.Если вы не используете динамический загрузчик, вы не можете использовать динамические библиотеки.
Обновление для отредактированного вопроса:
Когда создается dylib, он получает "имя установки"».Когда исполняемый файл связан с этим dylib, он сохраняет имя установки dylib в его ссылке на него.(Обратите внимание, что не хранит путь времени связывания файла dylib, с которым он связан.) Когда загружаемый исполняемый файл загружается, динамический загрузчик ищет dylib, используя записанное им имя установки, по умолчанию.
Вы можете указать имя установки, используя опцию -install_name <name>
для компоновщика.Это может быть абсолютный путь к месту установки библиотеки (например, /usr/local/lib/foo.dylib), если вы ожидаете, что она будет установлена в определенном месте.Однако часто это бесполезно.Вам нужно более гибкое средство для поиска динамического загрузчика dylib.
Динамический загрузчик понимает определенные префиксы специальных путей в именах установки для поддержки такой гибкости.Смотрите справочную страницу dyld(1)
.Например, если указать имя установки @executable_path/foo.dylib
, то во время загрузки загрузчик будет искать рядом с исполняемым файлом библиотеки.
Вы можете увидеть имя установки dylib с помощью otool -D foo.dylib
.У вашего dylib может не быть имени для установки, и в этом случае его эффективное имя для установки - это просто имя файла без пути.
Если загрузчик не находит библиотеку по имени установки, он выполняет поискстратегия.По умолчанию это выглядит в ~ / lib: / usr / local / lib: / lib: / usr / lib.Вы можете использовать некоторые переменные среды, чтобы изменить стратегию поиска.Например, вы можете установить DYLD_FALLBACK_LIBRARY_PATH
в список каталогов, разделенных двоеточиями, для поиска.Эти переменные среды также перечислены на справочной странице dyld(1)
.