У вас есть два варианта: а) изменить идентификатор библиотеки, б) изменить конечный продукт.
Идентификатор встроен в dylib и определяет, где dyld будет его искать. Идентификатор берется из библиотеки во время соединения (когда другие специальные флаги не используются). Вы можете проверить это с помощью otool -L
, например ::
gammu:~$ otool -L /usr/lib/libz.dylib
/usr/lib/libz.dylib:
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
Первая строка - это идентификатор dylib. Вы можете изменить его, используя install_name_tool -id <path> <library>
. Один из вариантов, который у вас есть, это использовать специальную форму @executable_path/...
, которая выглядит, начиная с местоположения вашего двоичного файла (есть и другие).
Второй вариант (достижение того же самого) - изменить путь к библиотеке в вашем продукте. Вы можете проверить, как он связывает библиотеки с помощью одной команды otool -L
:
gammu:~$ otool -L /usr/bin/emacs
/usr/bin/emacs:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
Затем вы можете изменить библиотеки с помощью install_name_tool -change <old> <new> <target>
, например ::
install_name_tool -change ../lib/abc.dynlib @executable_path/../lib/abc.dylib foo
Наконец, обратите внимание, что Xcode обычно делает все это для вас автоматически, если вы позволяете ему управлять dylib (вместо того, чтобы копировать его вручную).