Я пытаюсь создать исполняемый файл из моего SDL2-проекта, который будет работать на любом Mac, на который я его отправляю.
Моя программа написана на C ++, Xcode9.2
Очевидно способ пойти в XCode — Проект-> Архив. Это прекрасно работает, пока я запускаю продукт на своем Mac. На компьютере Mac, на котором не установлена SDL2.framework в / Library / Frameworks /, при запуске выдается следующая ошибка:
dyld: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
Referenced from: /Users/thomas/Downloads/Chat_Program_Mac v1/Chat_Program 2
Reason: image not found
Так что эта ошибка не очень удивительна, так как я не связывал статически (не знаю, как это работает в любом случае), и очевидно, что для работы программы необходимы каркасы.
В Windows вы просто помещаете файлы .dll в ту же папку, что и .exe, и это работает.
Теперь на Mac, размещение фреймворков в той же папке, что и исполняемый файл, ничего не изменит.
Из моего исследования я знаю, что в XCode в BuildSettings -> «Framework Search Paths» есть возможность указать компилятору, где искать фреймворки.
Кто-то на этом форуме ответил на аналогичный вопрос, указав в качестве пути поиска ./ и установив его как рекурсивный, чтобы компилятор мог искать фреймворки в той же папке, где находится исполняемый файл.
Это как-то приблизило меня к решению. Во время процесса сборки Xcode теперь ищет каркасы внутри папки отладки и создает исполняемый файл без ошибок, в то время как в / Library / Frameworks / нет каркасов SDL.
РЕДАКТИРОВАТЬ: это не работает для проекта-> Архив. Хотя я положил рамки в папку выпуска. (/ Users / Tim / Library / Developer / Xcode / DerivedData / Chat_Program-gapnuzuivnylrgbubtywdbzshous / Build / Products / Release)
Когда я пытаюсь запустить исполняемый файл, появляется та же ошибка, в которой говорится, что библиотека не может быть загружена.
Однако исполняемый файл запускается, если я помещаю фреймворки обратно в / Library / Frameworks /, что говорит о том, что должна быть возможность указать Xcode, где исполняемый файл должен искать фреймворки, а не BuildSettings -> «Пути поиска фреймворка » проекта.
Так как мне сказать моему исполняемому файлу искать фреймворк внутри его собственной папки?
Вот как я решил свою проблему:
Очевидно, это приводит к изменению @rpath в приведенном выше сообщении об ошибке на путь, по которому находится исполняемый файл, поэтому теперь фреймворк (-ы) можно поместить в ту же папку, что и исполняемый файл.
Довольно просто на самом деле, может быть, я идиот, которому пришлось целый день исследовать, чтобы найти это. Может быть, это просто очень хорошо спрятано и держится в секрете, насколько это возможно, даже в Интернете …
Что угодно — рад, что теперь работает 🙂
Других решений пока нет …