我刚试着在OSX Lion 上写一个简单的C程序
#include <stdio.h>
int main() {
printf("hello worldn");
return 0;
}
用gcc 编译
$ gcc hello.c
test.c:1:19: error: stdio.h: No such file or directory
test.c: In function ‘main’:
test.c:3: warning: incompatible implicit declaration of built-in function ‘printf’
好的。。。精细
$ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include
ld: library not found for -lcrt1.10.6.o
collect2: ld returned 1 exit status
什么?让我们看看。。。
$ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include -L/Developer/SDKs/MacOSX10.6.sdk/usr/lib test.c
$ ./a.out
hello world
终于!
这似乎只是为了让hello世界正常工作而付出了很多努力,我如何让gcc像在linux上那样默认地在MacOSX10.6.sdk目录中查找库和头文件?在linux上,我发现ldd和ldconfig非常有用,它们在OSX上似乎不存在。。。有对等的吗?在OSX上开发C还有哪些有用的工具?
是的,我知道xcode让这更容易,但假设我想使用vim和命令行来处理开源c项目。
我能想到三种可能性:
-
您安装了10.6并升级到10.7。你需要安装新版本的Xcode(4.1,从应用商店获得(才能取回开发工具。
-
您安装了Xcode,进行了自定义安装,并取消了"UNIX开发"之类的操作。重新运行安装程序并安装丢失的部件。
-
您安装了损坏的第三方版本的gcc。试试
which gcc
,看看你会得到什么。
在OS X 10.7上,如果您从Mac App Store下载了Xcode 4.1,然后运行它下载的安装程序(在/Applications
中(,假设您没有设置一些正在查看并影响苹果gcc
工具链的环境变量,那么您的第一次尝试应该会很好。在这种情况下生成的对象文件将使用默认的10.7 ABI(include
文件和库(。如果你想生产与OSX10.6兼容的东西,那么你需要告诉工具链使用10.6 SDK ABI,这就是你在第三次尝试中所做的。独立项目通常通过设置Makefile来自动构建来处理此问题。但是,除非你试图在OS X版本(这里是10.7(上构建一些东西,而该版本也将在OS X的早期版本(比如10.6(上运行,否则通常不需要使用SDK。