HICococaView не компилируется с GCC 4.2 - PullRequest
3 голосов
/ 21 января 2011

У нас есть большое приложение на основе углерода (PowerPlant), которое мы надеемся окончательно перенести на Cocoa.Мы будем делать это постепенно, и первым шагом будет попытка получить представление Cocoa в окне Carbon.

Кажется, проблема в том, что когда я использую любую из функций из HICocoaView.h, приложение не будеткомпиляция, если я не переключаю компилятор с GCC 4.2 на GCC 4.0.

Используя любой компилятор, кроме GCC 4.0, я получаю сообщение об ошибке в XCode о том, что функции недоступны, например, «HICocoaViewCreate недоступен».

Я не могу понять, почему это не сработает, придется ли нам переключаться на более старый компилятор или есть какие-то настройки, которые мы можем изменить, чтобы заставить его компилироваться?

Любая помощь или ссылки на полезную документацию попортирование углерода в какао очень ценится.Я прочитал старое руководство по интеграции Carbon Cocoa, но оно не упоминает об этом.

Редактировать: В соответствии с запросом вот вывод из сборки для командной строки gcc: -

/ Разработчик / usr / bin / gcc-4.2 -x target-c ++ -arch i386 -fmessage-length = 0 -pipe -Wno-триграфы -fpascal-strings -fasm-блоки -O0 -Wmissing-прототипы -Wreturn-тип -Wunused-variable -Wunused-value -D__IMPRO_DEBUG_BUILD__ -isysroot /Developer/SDKs/MacOSX10.5.sdk -mfix-and-continue -mmacosx-version-min = 10.5 -gdwarf-2 "-I / Users / matt / Code / MattsFeatureBranch / Modules / Заметки пользователя / Mac /../../../ (Intermediates) / Debug / User Notes.build/Debug/Module Bundle.build/User Notes.hmap "-Wparentheses -Wno-преобразование -Wno-знак-сравнение -Wno-multichar -Wno-deprecated-декларации" -F / Users / matt / Code / MattsFeatureBranch / Modules / User Notes / Mac /../../../Build Products / Mac / Debug / Плагины "" -F ../../../ Build Products / Mac / Debug "" -F ../../../ Сторонние разработчики / Mac / NVidia ""-I / Users / матовое / Код / MattsFeatureBranch /Модули / Замечания пользователя / Mac /../../../ Продукты для сборки / Mac / Отладка / Плагины / включают "-I ../ X-Platform -I ../../../ Common / Mac -I ../../../ Common / X-Platform -I ../../../ DLLs / ArcadiaCore / Mac -I ../../../ DLLs / ArcadiaCore / X-Platform "-I ../../../ Третья сторона / Mac / Powerplant "-I / Разработчик / SDKs / MacOSX10.5.sdk / Разработчик / Заголовки / FlatCarbon" -I ../../../ Третья сторона/ X-Platform / boost_1_38_0 "-I ../../../ DLLs / ArcadiaImaging / Mac -I ../../../ DLLs / ArcadiaImaging / X-Platform -I ../../../DLLs/ArcadiaDatabase/Mac -I ../../../ DLLs / ArcadiaDatabase / X-Platform -I ../../../ DLLs / ArcadiaUI / Mac -I ../../../DLLs/ArcadiaUI/X-Platform "-I ../../../ Сторонние разработчики / Mac / Дополнения к силовой установке" -I ../../../ DLLs / ArcadiaDevices / Mac -I ../../../DLLs/ArcadiaDevices/X-Platform -I ../../../ DLLs / Arcadia3D / Mac -I ../../../ DLLs / Arcadia3D / X-Platform "-I/ Users / matt / Code / MattsFeatureBranch / Modules / Заметки пользователя / Mac /../../../ (Промежуточные звенья) / Debug / Заметки пользователя. Build/Debug/Module Bundle.build/DerivedSources/i386 "" -I/ Users / matt / Code / MattsFeatureBranch / Modules / Заметки пользователя / Mac /../../../(Intermediates)/Debug/User Notes.build/Debug/Module Bundle.build/DerivedSources "-fpermissive -fasm-blocks -include" / Users / matt / Code / MattsFeatureBranch / Modules / Заметки пользователя / Mac /../../../(Intermediates)/Debug/SharedPrecompiledHeaders/XPrefix-acshmfbgvfwrdqbyayvgnckkypgr/XPrefix.h "-c" / Users / matt / Code / MattsFeatureBranch / Modules / Notes / User-Notes / Mac / MUppNo."/ Users / matt / Code / MattsFeatureBranch / Modules / Заметки пользователя / Mac /../../../ (Промежуточные звенья) / Отладка / Заметки пользователя. Build/Debug/Module Bundle.build/Objects-normal/i386/MUserNotesView.o "

1 Ответ

3 голосов
/ 21 января 2011

Из HICocoaView.h в SDK 10.5 и 10.6:

#if !__LP64__
extern OSStatus
HICocoaViewCreate(
  NSView *     inNSView,        /* can be NULL */
  OptionBits   inOptions,
  HIViewRef *  outHIView)                                                       AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;
…
#endif  /* !__LP64__ */

Это означает, что HICocoaViewCreate() недоступно для 64-битных (LP64) целей, т. Е. Если вам нужночтобы использовать эту функцию, вы должны использовать i386 (или PowerPC).

GCC 4.0 использует i386 по умолчанию даже при работе на 64-битных компьютерах.С другой стороны, GCC 4.2 нацеливается на x86_64 по умолчанию на 64-разрядных компьютерах:

$ gcc-4.0 a.c; lipo -info a.out
Non-fat file: a.out is architecture: i386

$ gcc-4.2 a.c; lipo -info a.out
Non-fat file: a.out is architecture: x86_64

Если вы хотите использовать HICocoaViewCreate() и GCC 4.2, скажите ему создать (и использовать) 32-разрядныйобъекты / двоичные файлы, передавая -arch i386.Например,

$ gcc-4.2 a.c -arch i386; lipo -info a.out
Non-fat file: a.out is architecture: i386

Несмотря на то, что часть Carbon доступна для 64-битных целей, вы заметите в 64-битном руководстве для разработчиков углерода , что большая частьHIToolbox просто недоступен.

Что касается перехода с Carbon на Cocoa, то по большей части это совершенно новый API Objective-C.Я не знаю ни одного простого руководства по миграции, и Ответ Питера Хоси на аналогичный вопрос о переполнении стека стоит прочитать.

...