希望简单的问题。我正在尝试从命令行学习基本的Objective-C编译,使用clang。我知道Xcode是复杂项目的一个更好的解决方案,我计划尽快转向它,但我个人认为如果我可以在终端中手动编译它,我会更好地理解一种语言,而对于小型的入门编程项目,我发现它更少在终端编译比在必须开始新项目时更麻烦。
所以问题是:如何编译由多个文件组成的Objective-C程序(从命令行)? (我正在尝试从Kochan教科书的第7章开始执行分数程序,其中main.m和Fraction.m文件都是#import“Fraction.h”,以及导入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>
答案 0 :(得分:7)
只编译实现文件(* .m),而不是接口/包含文件,所以这应该有效:
clang -fobjc-arc main.m Fraction.m -o prog1
奇怪的错误消息“生成多个输出文件”可能是由事实引起的 该clang还可以将头文件编译为“预编译头文件”。
答案 1 :(得分:2)
不要将Fraction.h
指定为源文件。它不是,它是一个头文件。
你几乎肯定想要投入-framework Foundation
。如果您使用任何其他框架,您可能还需要指定这些框架。