HICococaView没有使用GCC 4.2进行编译

时间:2011-01-21 09:37:26

标签: cocoa xcode gcc macos-carbon

我们有一个基于碳的大型(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“

1 个答案:

答案 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值得一读。