2011-01-21 2 views
3

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

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

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

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

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

Edit: В соответствии с просьбой, вот выход из сборки для GCC командной строки: -

/Developer/usr/bin/gcc-4.2 -x objective-c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -Wmissing-prototypes -Wreturn-type -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/User Notes/Mac/../../../(Intermediates)/Debug/User Notes.build/Debug/Module Bundle.build/User Notes.hmap" -Wparentheses -Wno-conversion -Wno-sign-compare -Wno-multichar -Wno-deprecated-declarations "-F/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../Build Products/Mac/Debug/Plugins" "-F../../../Build Products/Mac/Debug" "-F../../../Third Party/Mac/NVidia" "-I/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../Build Products/Mac/Debug/Plugins/include" -I../X-Platform -I../../../Common/Mac -I../../../Common/X-Platform -I../../../DLLs/ArcadiaCore/Mac -I../../../DLLs/ArcadiaCore/X-Platform "-I../../../Third Party/Mac/Powerplant" -I/Developer/SDKs/MacOSX10.5.sdk/Developer/Headers/FlatCarbon "-I../../../Third Party/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../../../Third Party/Mac/Powerplant Extras" -I../../../DLLs/ArcadiaDevices/Mac -I../../../DLLs/ArcadiaDevices/X-Platform -I../../../DLLs/Arcadia3D/Mac -I../../../DLLs/Arcadia3D/X-Platform "-I/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../(Intermediates)/Debug/User Notes.build/Debug/Module Bundle.build/DerivedSources/i386" "-I/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../(Intermediates)/Debug/User Notes.build/Debug/Module Bundle.build/DerivedSources" -fpermissive -fasm-blocks -include "/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../(Intermediates)/Debug/SharedPrecompiledHeaders/XPrefix-acshmfbgvfwrdqbyayvgnckkypgr/XPrefix.h" -c "/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/MUserNotesView.cpp" -o "/Users/matt/Code/MattsFeatureBranch/Modules/User Notes/Mac/../../../(Intermediates)/Debug/User Notes.build/Debug/Module Bundle.build/Objects-normal/i386/MUserNotesView.o"

ответ

3

От HICocoaView.h как в 10,5 и 10,6 SDK:

#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 

Даже если часть углерода доступна для 64-битных целей, вы заметите в 64-bit Guide for Carbon Developers, что большая часть HIToolbox просто не доступен.

Что касается перехода от Carbon to Cocoa, то это совершенно новый Objective-C API по большей части. Я не знаю ни одного простого руководства по миграции, и стоит Peter Hosey’s answer to a similar question on Stack Overflow.

+0

+1 за отличный ответ и причину проблемы. Хорошо сказано! –

+0

Спасибо за помощь. Это действительно отличный ответ, просто то, что мне нужно было знать. – Matt

+0

Поняв, что это немного больше в конфигурации сборки XCode, похоже, мы уже скомпилируем только 32-битные архитектуры. Если я чего-то не упускаю, должно быть что-то еще. – Matt

Смежные вопросы