Использование iOS 7 SDK с llvm-gcc-4.2

Я установил xcode 5 и заметил, что компилятор gcc устарел. Предполагая, что я не хочу переходить на Apple LLVM 5.0, вот мои вопросы:

Можно ли использовать iOS7 SDK и по-прежнему компилировать в llvm-gcc-4.2?

Если да, то как это сделать?

Если вы не знаете, возможно ли это, пожалуйста, не публикуйте ответы вроде «используйте clang, чувак», потому что они фактически не отвечают на вопросы, которые я опубликовал.


person podkova    schedule 19.09.2013    source источник
comment
Могу я спросить, почему вы не хотите использовать clang?   -  person trojanfoe    schedule 19.09.2013
comment
Я думаю, что мне просто любопытно недостаточно :). Скажем, есть огромный проект, который не любит компилироваться в clang. В будущем это будет исправлено, а пока было бы здорово скомпилировать по-старому :).   -  person podkova    schedule 19.09.2013
comment
Итак, вы хотите обновить его для использования iOS 7, но не исправлять его для использования clang? Я думаю, что ваш единственный путь - вернуться к Xcode 4.   -  person trojanfoe    schedule 19.09.2013
comment
Apple несколько раз выражала свое недовольство динозавром, которым является GCC, и заявляла, что планирует удалить его с тех пор, как они впервые начали использовать clang примерно в iOS 5, поскольку это делало их цепочку сборки несчастной. Если вы хотите придерживаться старого способа, вам придется придерживаться старого SDK.   -  person borrrden    schedule 19.09.2013
comment
Настоящая проблема Apple с GCC — это лицензия GNU. Вот почему они так много вложили в clang и llvm.   -  person Leo Natan    schedule 19.09.2013
comment
Я понятия не имею, работает ли это, но вы можете попытаться перезаписать компилятор по умолчанию, используя флаг CC, как описано в этот пост в разделе (2). Может быть несколько (или много) флагов, которые Xcode устанавливает по умолчанию, но которые не поддерживаются GCC. В этом случае вы, вероятно, увидите предупреждение в журнале сборки... В настоящее время у меня нет возможности проверить это самостоятельно.   -  person hagi    schedule 20.09.2013
comment
@trojanfoe clang не поддерживает инструкции __builtin SSE, вот как я пришел к этому вопросу. Раньше мы использовали llvm-gcc, который ранее был в комплекте с Xcode.   -  person robbie_c    schedule 24.10.2013
comment
@robbie_c Сообщение в этой теме рекомендует не использовать их в любом случае, а вместо этого рекомендует использовать встроенные функции: clang-developers.42468.n3.nabble.com/   -  person trojanfoe    schedule 24.10.2013
comment
clang.llvm.org/compatibility.html#vector_builtins для ленивых. Я знаю об этой проблеме, но у нас есть огромная кодовая база обработки данных, которая использует их повсюду. Похоже, у ОП похожая проблема.   -  person robbie_c    schedule 24.10.2013


Ответы (4)


Apple удалила поддержку llvm-gcc-4.2 в XCode 5. Даже если вы установите и измените базовый SDK на SDK 6.1, вы не сможете выполнять сборку с использованием llvm-gcc-4.2. Таким образом, ваш единственный вариант — продолжать использовать XCode 4.x, если вы хотите использовать llvm-gcc-4.2.

person rakmoh    schedule 19.09.2013

LLVM-GCC не включен в Xcode 5.

Я получил строку выше из https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_5_0.html

Итак, вопрос в том, что использовать вместо llvm-gcc?

person Ravindhiran    schedule 28.09.2013

Можно ли использовать iOS7 SDK и по-прежнему компилировать в llvm-gcc-4.2?

Если вы хотите скомпилировать все приложение с помощью llvm-gcc-4.2: скорее всего, нет. Я не проверял это сам, но в заголовки iOS 7 нужно было бы добавить только одну зависимость от функции clang, отсутствующей в llvm-gcc-4.2, и вы плаваете в ошибках компиляции. Возможно, вы сможете взломать их, но, вероятно, будет проще (не говоря уже о более надежном будущем) смириться с этим и перейти на clang.

Если вам нужно только скомпилировать некоторые приложения с помощью llvm-gcc-4.2: Конечно, если вам не нужно импортировать какие-либо заголовки iOS 7 в те части, которые вы создаете с помощью llvm-gcc. -4.2.

Вы можете попробовать перенести проблемные части в статическую библиотеку, скомпилировать ее с помощью gcc, а затем связать с окончательным приложением, созданным с помощью clang. Вы не сможете ориентироваться на 64-битную версию, так как llvm-gcc-4.2 не может генерировать код armv8, но в противном случае он должен работать.

Одно предостережение: если ваша статическая библиотека использует C++, могут возникнуть некоторые проблемы из-за различий в библиотеках ABI и std. Но это решаемые проблемы, по крайней мере.

person Chris Devereux    schedule 29.09.2013

Вы можете использовать homebrew для установки нужной вам версии gcc. Скорее всего, все ваши Makefiles нужно будет исправить (вздох)

Я сделал:

brew search gcc

И результаты:

homebrew/versions/gcc43     
homebrew/versions/gcc45 
homebrew/versions/gcc47    
homebrew/versions/gcc49
homebrew/versions/gcc44
homebrew/versions/gcc45
homebrew/versions/gcc48    
homebrew/versions/llvm-gcc28
homebrew/dupes/apple-gcc42
person DarthMike    schedule 29.09.2013