ошибка: синтаксическая ошибка перед маркером '@' (почему?) - PullRequest
0 голосов
/ 05 августа 2009

Я включаю объединяющий код sqlite в мой проект iPhone и удаляю ссылку на инфраструктуру iPhone sqlite.

Моя главная цель хорошо скомпилирована.

У меня есть вторая цель для модульного тестирования с google framework . При компиляции получаю:

ошибка: синтаксическая ошибка перед маркером '@'

Я не понимаю, почему. Я установил оба проекта на SDK 2.

ОБНОВЛЕНИЕ: я включаю ссылку на код sqlite & google. Я должен добавить, что целевой компиляции просто отлично в течение нескольких месяцев, прежде чем я добавил SQL-код. Я не публикую пример кода, потому что я получаю 1263 ошибки - поэтому я получаю ошибку во всех файлах - но это пример трассировки:

@class NSString, Protocol; <== ERROR HERE

Traceback:

        cd /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone
        setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
        /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0 -x c-header -arch i386 -fmessage-length=0 -pipe -std=c99 -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=20000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2 -iquote /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-generated-files.hmap -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-own-target-headers.hmap -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-all-target-headers.hmap -iquote /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-project-headers.hmap -F/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/Debug-iphonesimulator -F/Volumes/CrashReporter-1.0-rc2/CrashReporter-iPhone -F/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/Debug-iphonesimulator/include -I/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/usr/include/libxml2 "-I/Developer/RemObjects Software/Source" -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/DerivedSources/i386 -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/DerivedSources -c /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h -o /var/folders/EA/EAmC8fuyElexZfnpnjdyr++++TI/-Caches-/com.apple.Xcode.501/SharedPrecompiledHeaders/UIKit-dqqtnrciylhdtjbmyglpcezxchmz/UIKit.h.gch
    In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12,
                     from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:8,
                     from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:9:
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:120: 
error: syntax error before '@' token

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

Я наконец выясняю проблему.

Я копирую это с цели iPhone на цель тестирования:

GCC_DYNAMIC_NO_PIC = NO
GCC_OPTIMIZATION_LEVEL = 0
GCC_PRECOMPILE_PREFIX_HEADER = YES
GCC_PREFIX_HEADER = JhonSell_Prefix.pch
GCC_PREPROCESSOR_DEFINITIONS = DEBUG

Но почему раньше у меня не было проблем? Я действительно не понимаю.

1 голос
/ 05 августа 2009

С очень небольшим количеством действий, я думаю, будет включать заголовок Objective C из файла реализации C / C ++, следовательно, компиляция заголовка в C / C ++ вместо Objective C / Objective C ++.

Глядя на вашу обновленную информацию, вы на самом деле компилируете файл заголовка, а именно UIKit.h. Компилятор не знает, какой это тип заголовочного файла, поэтому по умолчанию используется C, который, конечно, не имеет @class и, следовательно, синтаксическую ошибку.

Так что вам придется выяснить, почему Xcode хочет скомпилировать UIKit.h во второй цели.

0 голосов
/ 21 марта 2012

Ваша gcc командная строка компилирует файл .h в файл .gch.

    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0
    # ...
    -x c-header -arch i386 -fmessage-length=0 -pipe -std=c99 -Wno-trigraphs # ...
    # ...
    # THE INPUT FILE:
    /Developer/Platforms/iPhoneSimulator.platform/Developer/
      SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Framework/
      UIKit.framework/Headers/UIKit.h
    # THE OUTPUT FILE:
    -o /var/folders/EA/EAmC8fuyElexZfnpnjdyr++++TI/
       -Caches-/com.apple.Xcode.501/
       SharedPrecompiledHeaders/UIKit-dqqtnrciylhdtjbmyglpcezxchmz/UIKit.h.gch

т.е. UIKit.h в UIKit.h.gch: преобразование файла заголовка в «предварительно скомпилированный» заголовок, который можно включить быстрее, поскольку он находится в токенизированной форме.

Похоже, компилятор не знает, что он должен предварительно компилировать заголовок; он каким-то образом настроен неправильно и просто рассматривает это как код, который должен быть фактически скомпилирован, и задыхается, потому что код является Objective C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...