Я впервые создаю установщик для приложения, и мне нужен совет.
Это приложение зависит от 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
, больше не будет правильным. Как мне автоматически изменить путь связывания после установки этих библиотек? Каков наилучший способ выйти за рамки этого?
install_name_tool
— отличный инструмент для этого, спасибо. К сожалению, я столкнулся с проблемой, когда использую его в сторонних библиотеках (из папки gcc), он делает недействительной подпись кода. Я видел, что в конце вашего ответа вы кратко упомянули об этом, что показалось интересным. Знаете ли вы какой-либо сайт/документацию, в которой более подробно рассказывается о том, как использовать дизайн кода для этой конкретной ситуации? - person Luis Angel Urena Lopez   schedule 04.03.2021codesign -f
может заменить существующую подпись. Для специальной подписи подойдетcodesign -f -s - [file]
... в противном случае см.man codesign
. Но если вам нужно сохранить идентификатор подписи третьей стороны, вы просто не можете изменить файл dylib. Это то, что гарантирует подпись кода. - person Siguza   schedule 04.03.2021