Как скомпилировать код С++ 0x для симулятора iPhone и iPhone
У нас есть математическое/научное приложение для визуализации белков, написанное на С++ с использованием OpenGL. Он был написан за последние пару лет и широко использует функции С++ 0x, найденные в GCC 4.4 и более поздних версиях. (Он также компилируется с Microsoft Visual С++ 10 в Windows, который поддерживает многие функции С++ 0x.)
Мы хотим выпустить версию для iPhone/iPad, поэтому нам нужно перенести ее из Linux/Windows на iPhone. Мы портировали подобные программы с очень небольшим усилием - добавили несколько файлов Objective C и сделали! - однако из-за используемых здесь функций С++ 0x у нас возникла проблема. Xcode в OS X использует GCC 4.2.1 (с 2007), который предшествует поддержке GCC С++ 0x. Кажется, огромный шаг назад, чтобы переписать весь этот красивый код С++ 0x, чтобы не использовать функции С++ 0x, и мы действительно не хотим поддерживать резервную кодовую базу, когда марш к С++ 0x ясен.
Есть ли способ использовать GCC 4.5 (или 4.6, из SVN) для таргетинга на iPhone и iPhone? Если да, то как? Предпочтительно, изнутри Xcode, так как функция click-and-run/click-and-debug очень полезна. Было бы замечательно, если бы вы могли ввести "GCC 4.6" в поле "Версия компилятора C/С++" в Xcode и просто все работает.
(Как в стороне, топ-версия дерева Clang - только вчера! - поддерживает некоторые функции С++ 0x, но пока не поддерживает лямбда-выражения, поэтому, возможно, для нас пока.)
Ответы
Ответ 1
С головы до ног, я скажу, что, вероятно, это не очень чистый или простой способ сделать это, пока Apple официально не поддержит его. Вероятно, вы уже это знаете, но причина, по которой Xcode использует более старую версию GCC, заключается в том, что Apple вносит значительные изменения в инструментальную цепочку GNU и выпускает свою версию под APSL (которая несовместимо с GPL). Поэтому, по большей части, вы можете считать свою версию GCC полной вилкой. Я столкнулся с этой проблемой при попытке перенести версию инструментальной цепочки Apple в Linux. У меня был ограниченный успех, но это не маленькое предприятие...