Objective-C 和 MetroWerks C/C++ IDE

Posted

技术标签:

【中文标题】Objective-C 和 MetroWerks C/C++ IDE【英文标题】:Objective-C And MetroWerks C/C++ IDE 【发布时间】:2009-10-27 22:59:20 【问题描述】:

我正在学习 Objective-C,我的朋友有一个真正的 Macintosh IIci,它使用 Mac System 7(特别是 7.5.5 和 68k 处理器)并且我已经安装了 Metrowerks C/C++ IDE(我认为它是版本 1,但我不知道),但我没有测试它,然后我想知道一件事:可以使用 NSObjects/Objects 和 AppKit 或类似的东西在 Objective-C 中开发吗?谢谢。

【问题讨论】:

如果您想要 68K 级的 Cocoa 前体开发体验,我身边还有几台 NeXT 机器。 ;) 【参考方案1】:

正如斯蒂芬所说,简短的回答是否定的。但是,只是为了好玩,我开始考虑你必须做什么才能真正做到这一点。

1) 您必须让 gcc 在 68k 上运行(gcc 是使用 Objective-C 语言的编译器;您可以用 llvm 代替 gcc,但我们不要 疯狂)。这绝非易事。快速浏览最新的 gcc 版本并没有显示该平台的任何内容(不足为奇)。我不是 gcc 方面的专家,但我敢打赌它使用了 gcc 特定的扩展和现代 C,所以让它与现有的 68k 编译器一起编译可能是不可行的。

所以第一步是为 gcc 添加一个 68k 的后端。这将允许 gcc 吐出将在 68k 上运行的代码。然后,您可以使用支持 68k 的 x86 构建的 gcc 来交叉编译一个新的 gcc 二进制文件,该二进制文件将在您的旧 Mac 上实际运行。

我以前从未搞过 gcc,我怀疑这项任务将花费我大约两到三年的时间。也许更多。但是,这并非不可能。

2) 一旦您获得了可以在 68k 机器上运行的现代版本的 gcc,您就可以使用它为 x86 或 PPC 进行交叉编译。 (由于您在谈论 AppKit,您将永远无法在旧计算机上实际运行任何这些程序。所有测试都必须在更现代的机器上进行。)您现在必须获取所有库和来自目标机器(PPC 或 x86 Mac)的 Cocoa/Foundation/AppKit/libc/etc 的标头,并将它们放在 68k 上的 gcc 可以找到的位置。这可能需要花费 6 个月的时间来完善。但同样,这不应该是不可能的。

不过,这可能不合法。据我所知,OS X(包含 Cocoa)和 Xcode 的许可协议不会让您将这些二进制文件随意移动到您想要的任何机器上。在这样做之前,您需要与一位称职的律师交谈,因为没有人愿意接受国际刑警组织的访问。

3) 我想你已经完成了。你可以在你的 Mac IIci 上编写 Objective-C/Cocoa 代码,为 PPC 或 x86 Mac 编译它,使用你最喜欢的方法将它运送到 OS X 机器上(我从 2005 年开始只是一个 Mac 人,所以我没有'甚至不知道 IIci 上的连接选项),并且相当痛苦地对其进行测试和调试。

此时,您可以访问在 PPC 或 x86 芯片上运行 OS X 的 Mac。你会想知道为什么你不只是在这台机器上做所有的开发。而且由于您已经花费了几年时间来设置您的 IIci 开发环境,因此购买一台旧的 PPC Mac 进行开发将会便宜

不过,这可能是一个有趣的想法。如果你把它拉过来,它可能会让你登上 reddit 的首页。 (不过,老实说,如果这就是你所追求的,那么为 YouTube 伪造它会更容易。)

【讨论】:

你有点离题了。为 68k 编译 Objective-C 确实很困难,但最困难的部分是框架。您不能“从目标机器获取 Cocoa/Foundation 的所有库”,因为它们针对不同的处理器架构和操作系统。它们在 68k Mac 上毫无用处。您必须自己重新实现所有这些框架。 事实上,您实际上可以在 Metrowerks 中为 68k Mac 编写 Objective-C,使用类似 Portable Object Compiler 的东西,它只是将 Objective-C 转换为 C编译前:users.telenet.be/stes/compiler.html(但您仍然会缺少 Foundation、AppKit 等...POC 的替代品称为 ObjectPak,它真的很旧【参考方案2】:

简短回答:不。

Objective-C 成为 Mac 开发与 OS X 一起使用的通用语言,在计算机出货 10 年后进入测试版。大多数前 OS X 系统的开发都是使用 C 或 C++ 完成的。

如果没有 OS X,您将无法链接任何系统库或头文件,Metrowerks 编译器将不了解 Objective-C 语法或 C 的运行时扩展。

最重要的是,Objective-C 框架是为 PowerPC(或现在的 Intel)mac 构建的,而该机器中的处理器使用较旧的 68k 架构。

【讨论】:

7.5 中仍然有大量的 Pascal。 实际上,尽管没有可链接的运行时库,但 CodeWarrior 的最新版本确实 支持 Objective-C,但版本 1 都没有。 :-)【参考方案3】:

在 20 年代初,gcc 仍在为 68k Amiga 编译,因此可能有机会让它在 68k Mac OS 上运行。我相信至少从 90 年代初就可以为 gcc 提供 Objective C 扩展。

另一个选择是使用 68k Linux。有一个 68k 的 Debian 4.0 (etch) 端口,目前正在努力恢复它,因此您可能会运行一个相当新的 gcc 版本。

还有交叉编译的可能。

同时代的 C 环境(不知道是否有支持 Objective C)是 Think C(后来的 Symantec C++)和 Apple 的 Macintosh Programmers Workshop。从理论上讲,您可能会得到其中之一来编译一个客观的 C 支持版本的 gcc。

【讨论】:

【参考方案4】:

不,据我所知,它们不可能太老了。

【讨论】:

以上是关于Objective-C 和 MetroWerks C/C++ IDE的主要内容,如果未能解决你的问题,请参考以下文章

Metrowerks CodeWarrior 调试/运行错误

使用 MetroWerks C/C++ 开发的 C/C++ 资源

C++和Objective-C混编(官方文档翻译)

objective-c和Cpp怎么混合编程?

Objective-C 和 C++ 的区别有哪些?

使用Objective-C时的基本输入和输出是啥[关闭]