【问题标题】:How can I mimic the GNU/linux C development environment on OSX Lion?如何在 OSX Lion 上模仿 GNU/linux C 开发环境?
【发布时间】:2011-10-21 12:18:40
【问题描述】:

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

#include <stdio.h>
int main() {
  printf("hello world\n");                                                                          
  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 world 正常工作,我如何让 gcc 默认在 MacOSX10.6.sdk 目录中找到库和头文件,就像在 linux 上一样?在 linux 上,我发现 ldd 和 ldconfig 非常有用,它们在 OSX 上似乎不存在......有没有等价物?在 OSX 上开发 C 语言还有哪些其他有用的工具?

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

【问题讨论】:

  • 据我所知,您的第一次尝试应该有效。至少在我的机器上它确实可以工作。
  • 我会尝试检查 xcode 做了什么,比如它设置了哪些环境变量以及它传递给 gcc 的哪些选项并将其复制到 makefile 中。这样,您只需执行make 和瞧。
  • @zneak 我认为它也可以,我隐约记得它以前工作过,但这是我升级到 OSX lion (10.7) 后第一次尝试编译任何简单的 C 程序
  • 恐怕我不是 OSX 用户,但gcc -v --help 的某些输出可能对那些用户有所帮助。但基本上,我相信你已经猜到了,它看起来像是一个破坏(或设置不正确)的环境。
  • 如果您希望其他人能够帮助您,请将“which gcc”的结果添加到其他人已经指出您应该提供的信息中。

标签: c macos development-environment


【解决方案1】:

我能想到三种可能:

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

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

  3. 您安装了损坏的第三方 gcc 版本。试试which gcc,看看你会得到什么。

【讨论】:

  • hm...没有 xcode 4.1 可能是它...现在安装它。如果它修复了我的环境,我会接受你的回答:)
  • 是的,我感觉自己像个白痴,升级到lion的时候没有升级xcode。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2011-10-09
    相关资源
    最近更新 更多