如何在OSX Lion上模拟GNU/linux C开发环境



我刚试着在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项目。

我能想到三种可能性:

  1. 您安装了10.6并升级到10.7。你需要安装新版本的Xcode(4.1,从应用商店获得(才能取回开发工具。

  2. 您安装了Xcode,进行了自定义安装,并取消了"UNIX开发"之类的操作。重新运行安装程序并安装丢失的部件。

  3. 您安装了损坏的第三方版本的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。

最新更新