Как связать библиотеки .dylib после установки приложения

Я впервые создаю установщик для приложения, и мне нужен совет.

Это приложение зависит от A.dylib, а A.dylib зависит от двух других библиотек: libstdc++.6.dylib и libgomp.1.dylib, которые все находятся в папке gcc. Когда я делаю otool -L на A.dylib, вот что я получаю:

A.dylib (compatibility version 0.0.0, current version 0.0.0)
/opt/homebrew/opt/gcc/lib/gcc/10/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.28.0)
/opt/homebrew/opt/gcc/lib/gcc/10/libgomp.1.dylib (compatibility version 2.0.0, current version 2.0.0)

Это означает, что если этих двух библиотек нет, приложение вообще не запустится. Итак, моя проблема связана с установщиком, я должен установить libstdc++.6.dylib и libgomp.1.dylib в /opt/homebrew/opt/gcc/lib/gcc/10/ для пользователя? Даже если там не установлен gcc или вообще?

Другой вариант — установить библиотеки, скажем, под /Library/Application Support/, но тогда это будет означать, что путь, на который ссылается A.dylib, больше не будет правильным. Как мне автоматически изменить путь связывания после установки этих библиотек? Каков наилучший способ выйти за рамки этого?


person Luis Angel Urena Lopez    schedule 03.03.2021    source источник
comment
Ни один из ваших вариантов, хотя они могут работать, не является тем, что вам нужно. Лучший способ — связать.   -  person Richard Barber    schedule 04.03.2021
comment
@RichardBarber, не могли бы вы рассказать немного подробнее, что вы подразумеваете под комплектацией?   -  person Luis Angel Urena Lopez    schedule 04.03.2021
comment
@Siguza install_name_tool — отличный инструмент для этого, спасибо. К сожалению, я столкнулся с проблемой, когда использую его в сторонних библиотеках (из папки gcc), он делает недействительной подпись кода. Я видел, что в конце вашего ответа вы кратко упомянули об этом, что показалось интересным. Знаете ли вы какой-либо сайт/документацию, в которой более подробно рассказывается о том, как использовать дизайн кода для этой конкретной ситуации?   -  person Luis Angel Urena Lopez    schedule 04.03.2021
comment
Чтобы отметить, что я впервые работаю на Mac и впервые вижу концепцию кодирования, поэтому я новичок в этом сценарии.   -  person Luis Angel Urena Lopez    schedule 04.03.2021
comment
@LuisAngelUrenaLopez зависит от того, какая подпись вам нужна. Как правило, codesign -f может заменить существующую подпись. Для специальной подписи подойдет codesign -f -s - [file]... в противном случае см. man codesign. Но если вам нужно сохранить идентификатор подписи третьей стороны, вы просто не можете изменить файл dylib. Это то, что гарантирует подпись кода.   -  person Siguza    schedule 04.03.2021
comment
@Siguza Я понимаю, что подпись кода гарантирует, что это имеет смысл. Это означает, что мне нужно сохранить нетронутыми сторонние библиотеки, что создает для меня проблему. Поскольку я перемещаю все библиотеки внутри .app, это означает, что путь, с которым они связаны, будет неправильным после их перемещения. Поскольку я не могу изменить этот путь, вы рекомендуете мне установить эти библиотеки на компьютер пользователя точно по тому пути, на который указывают зависимости? Или есть более чистый способ сделать это без аннулирования подписи кода?   -  person Luis Angel Urena Lopez    schedule 04.03.2021
comment
developer.apple.com/library/archive/ документация/ Структура пакета приложений.   -  person Richard Barber    schedule 05.03.2021