Вы не можете прямо поставить dylib внутри исполняемого файла. (Это в значительной степени то, что были созданы для пучков, но это не помогает вам с инструментами командной строки.)
Вы можете перестроить каждый dylib как статическую (.a) библиотеку, и в этом случае весь код исполняемого файла потребности будут скопированы в исполняемый файл, и вам не нужно ничего распространять с ним. Если у вас есть источник для библиотек, это, как правило, очень просто, но, не зная точно, как вы строите вещи, трудно сказать, что измениться.
Одна вещь, которую следует помнить со статической ссылкой, заключается в том, что она влияет на совместное использование разных лицензий. В частности, если какая-либо из библиотек, которые вы используете, является лицензией LGPL, их статическая связь имеет последствия, которые не имеют динамической компоновки. См. this question (и ссылки на ответ) для получения более подробной информации, но на самом деле вам не следует доверять ответы на Stack Overflow для юридических консультаций по лицензиям. Во всяком случае, это, вероятно, не проблема для OP: «Я хочу создать программу и передать ее моему другу», но для других, кто читает этот вопрос позже, возможно.
Если статическое соединение невозможно или желательно, все, что вам нужно сделать, это упаковать исполняемый файл и dylib вместе и получить их на машине вашего друга. Поскольку он, по-видимому, не хочет запускать установщик, это означает tarball или zipfile.
Единственная сложная часть - убедиться, что exe знает, где найти dylib. Если каждый dylib не находится в dyld пути поиска (см. Man-страницу для dyld для более подробной информации, но это не поможет вам, если вы не хотите ничего устанавливать), или в том же месте, что и в то время, когда вы связанный с ним, запуск исполняемого файла завершится неудачей с ошибкой «image not found» от dyld.
К счастью, «точное место» может означать магический путь, например «@ executable_path/libfoo.dylib», что означает «в том же каталоге, что и myexe», а не абсолютный путь, например «/ opt/local/lib /libfoo.dylib "или относительный путь, например" ../../foo/build/Release/libfoo.dylib ".(Обратите внимание, что нормальные относительные пути относительно текущего рабочего каталога, а не исполняемый файл или расслоению каталога.)
Вы можете увидеть, где myexe ищет, делая это:
otool -L myexe
Все, что не смотрит в @ executable_path (за исключением вещей в/Lib и/USR/Lib, который является частью операционной системы и не должны быть распределены), вы можете исправить так:
install_name_tool -change ../../../mydl/build/Release/libmydl.dylib @executable_path/libmydl.dylib myexe
Теперь вам просто нужно скопировать все эти дилибы рядом с myexe, поднимите его и отнесите его своему другу, и он может просто разогнать его и запустить exe.
Не могли бы вы принять ответ Абарнер? Это поможет другим людям найти его. Это было очень полезно для меня. – Yitz
Готово. Извините за задержку. – Olie