我们有一个基于碳的大型(PowerPlant)应用程序,我们正在寻找最终移植到Cocoa。我们将逐步执行此操作,第一步是尝试将Cocoa视图放入Carbon窗口。
问题似乎是当我使用HICocoaView.h中的任何函数时,除非我将编译器从GCC 4.2切换到GCC 4.0,否则应用程序将无法编译。
使用除GCC 4.0之外的任何编译器,我在XCode中得到一个错误,即函数不可用,例如: “HICocoaViewCreate不可用”。
我无法弄清楚为什么这不起作用,我们是否必须切换到较旧的编译器,或者是否有一些设置我们可以更改以使其编译?
有关将碳移植到Cocoa的有用文档的任何帮助或指示都非常感谢。我已经阅读了旧的Carbon Cocoa Integration指南,但没有提到这一点。
编辑:根据请求,这是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 /../../../(中间体)/ Debug / User Notes.build/Debug/Module Bundle.build/User Notes.hmap“-Whatarentheses -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 产品/ Mac /调试“”-F ../../../第三方/ Mac / NVidia“ “-I /用户/无光泽/代码/ MattsFeatureBranch /模块/用户 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 /../../../(中间体)/ Debug / User Notes.build/Debug/Module Bundle.build/DerivedSources/i386" “-I /用户/无光泽/代码/ MattsFeatureBranch /模块/用户 Notes / Mac /../../../(中间体)/ Debug / User Notes.build/Debug/Module Bundle.build/DerivedSources“-fpermissive -fasm-blocks -include “/用户/无光泽/代码/ MattsFeatureBranch /模块/用户 备注/ Mac的/../../../(中间体)/Debug/SharedPrecompiledHeaders/XPrefix-acshmfbgvfwrdqbyayvgnckkypgr/XPrefix.h” -c“/ Users / matt / Code / MattsFeatureBranch / Modules / User Notes / Mac / MUserNotesView.cpp”-o “/用户/无光泽/代码/ MattsFeatureBranch /模块/用户 Notes / Mac /../../../(中间体)/ Debug / User Notes.build/Debug/Module Bundle.build/Objects-normal/i386/MUserNotesView.o“
答案 0 :(得分:3)
来自10.5和10.6 SDK中的HICocoaView.h:
#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)为目标。
即使在支持64位的计算机上运行,GCC 4.0也默认使用i386。另一方面,GCC 4.2默认在64位计算机上定位x86_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,请通过传递-arch i386
告诉它创建(和使用)32位对象/二进制文件。例如,
$ gcc-4.2 a.c -arch i386; lipo -info a.out
Non-fat file: a.out is architecture: i386
尽管部分Carbon可用于64位目标,但您会在64-bit Guide for Carbon Developers中注意到HIToolbox的大部分内容都不可用。
至于从Carbon迁移到Cocoa,它在很大程度上是一个全新的Objective-C API。我不知道任何简单的迁移指南,Peter Hosey’s answer to a similar question on Stack Overflow值得一读。