install_name_tool -change завершается неудачно и игнорирует флаг -headerpad_max_install_names
У меня есть исполняемый файл командной строки, который содержит ссылки на dylibs, которые при распространении не будут в указанном месте, возвращаемом otool -L
,
Например, учитывая бинарный файл foo
:
$ otool -L foo
/opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
...
В моем установщике у меня есть скрипт после установки, который пытается использовать install_name_tool -change
чтобы исправить это, чтобы foo
ссылки на dylib в новом месте.
Например:
$ sudo install_name_tool -change /opt/local/lib/libgcc/libstdc++.6.dylib /somewhere/else/more/sensible/libstdc++.6.dylib foo
Но это изменение игнорируется и молча терпит неудачу. Когда я бегу otool -L
снова:
$ otool -L foo
/opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
...
Ничего не изменилось.
Я собираю толстые двоичные файлы и попытался добавить -headerpad_max_install_names
флаг компиляции в 32-битный Makefile. Это не решило проблему, в этом install_name_tool -change
по-прежнему молчит.
Я прочитал это -headerpad_max_install_names
ничего не делает на 64-битных платформах, но я все равно добавил его в 64-битный Makefile. Как и ожидалось, это тоже не решило проблему.
Как мне исправить мою процедуру компиляции, чтобы я мог в конечном итоге изменить путь к связанному dylib с install_name_tool
?