Если вы скомпилируете этот файл p3.cxx:
class foobarclass
{
public:
int i0;
};
void otherfun(void);
void mumble(void);
void fun(void)
{
try {
otherfun();
} catch(foobarclass &e) {
mumble();
}
}
Как это:
xcrun clang++ -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -fexceptions -c p3.cxx -p3.64.o
а также
xcrun clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -fexceptions -c p3.cxx -o p3.32.o
и затем проверьте символ «typeinfo для foobarclass»:
nm -m p3.64.o|grep ZTI
0000000000000110 (__DATA,__datacoal_nt) weak private external __ZTI11foobarclass
nm -m p3.32.o|grep ZTI
00000134 (__DATA,__datacoal_nt) weak external __ZTI11foobarclass
Почему символ слабый частный внешний в корпусе arm64? Это означает, что dlsym () не найдет его во время выполнения. Это нарушает некоторые вещи низкого уровня в базе кода LibreOffice.
Я задал тот же вопрос на соответствующем форуме разработчиков Apple и получил ответ, что это намеренно, чтобы уменьшить количество глобально видимых символов в исполняемом файле. Так что мне просто придется с этим жить.
Установите архитектуру в настройке сборки на Стандартные архитектуры (armv7, armv7s)
ARCHS = **armv7 armv7s**
VALID_ARCHS = **armv6 armv7 armv7s**
Xcode может собрать ваше приложение как с 32-битными, так и с 64-битными двоичными файлами.
включен. Этот объединенный двоичный файл требует минимальной цели развертывания
iOS 7 или более поздняя версия.Примечание: будущая версия Xcode позволит вам создать одно приложение, которое
поддерживает 32-разрядную среду выполнения на iOS 6 и более поздних версиях и поддерживает
64-разрядная среда выполнения на iOS 7.
Обновить
В Xcode 5.0.1 они добавили поддержку для создания 64-битного двоичного файла для iOS 5.1.1 и выше.
Xcode 5.0.1 может собрать ваше приложение как с 32-битными, так и с 64-битными двоичными файлами
включен. Этот объединенный двоичный файл требует минимальной цели развертывания
iOS 5.1.1 или более поздняя версия. 64-разрядный двоичный файл работает только на 64-разрядных устройствах
под управлением iOS 7.0.3 и новее