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?

0 ответов

Другие вопросы по тегам