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

如何在OSX Lion上模拟GNU/linux C开发环境?,c,macos,development-environment,C,Macos,Development Environment,我只是想在OSX Lion上写一个简单的C程序 #include <stdio.h> int main() { printf("hello world\n"); return 0; } 好的……好的 $ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include ld: library n

我只是想在OSX Lion上写一个简单的C程序

#include <stdio.h>
int main() {
  printf("hello world\n");                                                                          
  return 0;
}
好的……好的

$ 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 world正常工作,这似乎需要付出很多努力,如何让gcc在默认情况下像在linux上一样在MacOSX10.6.sdk目录中查找库和头文件?在linux上,我发现ldd和ldconfig非常有用,它们似乎不存在于OSX上……是否有一个等价物?在OSX上开发C还有哪些有用的工具


是的,我知道xcode使这更容易,但假设我想使用vim和命令行来处理开源c项目。

在OS X 10.7上,如果您从Mac App Store下载了xcode 4.1,然后运行它下载的安装程序(在
/Applications
),假设您没有设置一些环境变量来查看和影响苹果的
gcc
工具链,那么您的第一次尝试应该可以正常工作。在这种情况下生成的对象文件将使用默认的10.7ABI(
include
files和lib)。如果您想要生成与OS X 10.6兼容的东西,那么您需要告诉工具链使用10.6 SDK ABI,这就是您在第三次尝试中所做的。一个独立的项目通常通过设置一个Makefile来自动构建来处理这个问题。但是,除非您试图在OS X版本(这里是10.7)上构建一些东西,而该版本也将在OS X的早期版本(比如10.6)上运行,否则通常不需要使用SDK。

我可以想到三种可能性:

  • 您已安装10.6并升级到10.7。您需要安装新版本的Xcode(4.1,从app store获取)才能取回开发人员工具

  • 您安装了Xcode,进行了自定义安装,并且未选中“UNIX开发”或其他内容。重新运行安装程序并安装缺少的部件

  • 您安装了一个损坏的第三方版本的gcc。尝试
    哪个gcc
    ,看看你得到了什么


  • 据我所知,你的第一次尝试应该是有效的。至少在我的机器上是可以工作的,我会尝试检查xcode的功能,比如它设置了哪些环境变量,以及它传递给gcc的哪些选项,然后在makefile中复制这些内容。这样你就可以做
    make
    ,瞧。@zneak我想它也可以,我模糊地记得它以前工作过,但这是自从升级到OSX lion(10.7)以来我第一次尝试编译任何简单的C程序。我恐怕我不是OSX用户,但是
    gcc-v--help
    的一些输出可能对那些有帮助的人有帮助。但基本上,我相信你已经猜到了,它看起来像是一个崩溃(或设置不正确)的环境。如果你想让其他人能够帮助你,请将“哪个gcc”的结果添加到其他人已经指出你应该提供的信息中。嗯…没有xcode 4.1可能是它…现在安装它。如果能修复我的环境,我会接受你的回答:)是的,我觉得自己像个白痴,升级到lion时没有升级xcode。
    $ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include -L/Developer/SDKs/MacOSX10.6.sdk/usr/lib test.c
    $ ./a.out
    hello world