【问题标题】:Compiling multiple Objective-C files on the command line with clang使用 clang 在命令行编译多个 Objective-C 文件
【发布时间】:2013-05-08 17:33:36
【问题描述】:

希望是简单的问题。我正在尝试使用clang从命令行学习基本的Objective-C编译。我知道 Xcode 是复杂项目的更好解决方案,我计划很快转向它,但我个人觉得如果我可以在终端中手动编译它,我会更好地理解一门语言,对于小型入门编程项目,我发现它更少在终端中编译比启动一个新项目更麻烦。

所以问题是:如何编译一个包含多个文件的 Objective-C 程序(从命令行)? (我正在尝试使用 Kochan 教科书第 7 章中的分数程序,其中包含 #import "Fraction.h" 的 main.m 和 Fraction.m 文件,以及导入 Foundation 框架的 Fraction.h 文件。)要编译单个文件,我使用类似

clang -fobjc-arc main.m -o prog1

但是,如果我键入它并且我想在项目中包含除 main.m 之外的文件,我会收到以下错误:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我尝试将其他文件作为参数添加到命令中,例如

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1

然后我得到

clang: error: cannot specify -o when generating multiple output files

如果我然后删除 -o 参数,如

clang -fobjc-arc main.m Fraction.h Fraction.m

然后我得到一大堆关于基础框架的错误,最终以“致命错误:发出的错误太多,现在停止”结束。

我该如何做到这一点并使其发挥作用?还是只要涉及多个文件,我就需要收拾它并使用 Xcode?​​p>

【问题讨论】:

  • 一个错误是您将包含文件“Fraction.h”指定为编译器的参数。
  • 啊!谢谢。就是这样:它只需要 .m 文件而不是 .h。

标签: objective-c c clang


【解决方案1】:

只有实现文件 (*.m) 被编译,而不是接口/包含文件,所以这应该可以工作:

clang -fobjc-arc main.m Fraction.m -o prog1

奇怪的错误信息“生成多个输出文件”可能是由事实引起的 那clang也可以把头文件编译成“预编译的头文件”。

【讨论】:

  • -fobjc-arc 在使用旧版运行时的平台上不受支持
  • @AbdennourTOUMI:没错。但是this 问题显然是关于如何在命令行上with ARC 编译Objective-C 代码。否则,只需省略该选项。
  • no ,,no , , 我的意思是当我试图在 Ubuntu 下编译这些文件 github.com/macmade/host-manager/tree/master/source 时显示的错误...如果您向我解释如何在 LINUX 下编译这些文件
  • @AbdennourTOUMI:目前我没有带有 Clang 和 Objective-C 的 Linux 计算机,所以我无法为您提供帮助。
【解决方案2】:

不要将Fraction.h 指定为源文件。不是,是头文件。

您几乎肯定也想输入-framework Foundation。如果您使用任何其他框架,您可能还需要指定这些。

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2023-03-14
    • 2012-03-09
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多