2012-05-23 6 views
2

Проблема может заключаться в использовании компилятора LLVM 3.1 от Apple, и я уверен, что это можно устранить, отключив NEON. Однако мы хотели бы использовать NEON.XCode IOS Apple LLVM 3.1 - Eigen NEON breaks

Я также вполне уверен, что это ошибка с моей настройкой в ​​XCode, но это может быть с Apple. На самом деле я просто протягиваю несколько советов в правильном направлении.

/Eigen/src/Core/util/Macros.h 
188:Unknown type name 'namespace' 
188: Expected ';' after top level declarator 

/Eigen/Core 
144:'cerrno' file not found 

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/3.1/include/arm_neon.h 
55: Unknown type name 'float32_t' 

Эта недостающая ошибка float32_t возникает каждый экземпляр в этом файле. Даже несмотря на то, что строка 33 четко обозначена typedef.

UPDATE: Если я заставляю #define EIGEN_NO_DEBUG то единственная ошибка остальной недостающего cerrno. На самом деле кажется, что все библиотеки cXXX отсутствуют (например, cstdlib). Но они работают, если я включаю их за пределы Эйгена.

+3

Первая ошибка заставляет меня думать, что вы компилируете с clang вместо clang ++ или, по крайней мере, используя компилятор c вместо C++. –

+0

Файл, в который я включаю некоторые файлы C++ (включая Eigen), является файлом .mm, поэтому я предполагаю, что он будет использовать clang ++. Я не понял, как сказать XCode, чтобы показать мне свой журнал компилятора, чтобы я действительно видел, что он делает. – Halsafar

+1

Благодаря шарту. Проблема была обнаружена. Под «SupportingFiles» была main.m. Это означает, что clang использовался для компиляции main.m, который включал файлы и в конечном итоге приводил к тому, что Eigen был скомпилирован с неправильным компилятором. Я удивлен, что не было еще миллиона ошибок. Переименовать main.m на main.mm, проблемы решены. Я еще не могу ответить на свой вопрос ... +1 комментарий короткий. – Halsafar

ответ

4

Как упоминалось в комментариях, проблема заключалась в том, что исходный код составлялся как Objective-C вместо Objective-C++. Исправлены проблемы.

В частности, файл (main.m) не переименовывается в (main.mm). Если вы переименовываете свои файлы на .mm, поэтому он использует ObjC++ (clang ++), затем убедитесь, что вы их получите.