【问题标题】:El Capitan: Undefined symbol "start" whenever I compile a C programEl Capitan:每当我编译 C 程序时,未定义的符号“开始”
【发布时间】:2015-11-06 23:33:46
【问题描述】:

我最近安装了 OS X El Capitan,安装后我的 C 链接器出现问题。每当我尝试编译任何程序时,它都会说

Undefined symbols for architecture x86_64:
  "start", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

无论我使用从 Xcode 开发人员工具安装的 Clang、从 Homebrew 安装的 Clang 还是从 Homebrew 安装的 GCC,都会发生这种情况。它只是在我安装 El Capitan 后才开始发生的。

【问题讨论】:

  • 能否包含用于编译应用程序的命令行?
  • 你是说命令?我只是使用gcc program.cclang program.c。但是当我运行其他需要编译 C 文件的程序时它也会失败(Haskell 的 Cabal 必须编译 C 文件并且它会以同样的方式失败)。
  • 您是否尝试过重新安装 xcode-7.0.1 - xcode-select --install
  • @alvits 是的,我已经做到了。

标签: c macos gcc clang


【解决方案1】:

我遇到过类似的问题。 在我将我的 macpro 升级到 OS X El Capitan 后,我无法使用从 Macport 安装的 GNU gcc 来编译我的程序。它显示相同的错误消息。然而,在我的情况下,clang 工作得很好。

我在网上搜索并发现了这个: Undefined symbol "start" while linking D program through LD 它说在 gcc 选项中添加 -lcrt1.o。 我试过了,它确实解决了这个问题,所以你可以试试这个。

但我发现了更完整的修复(如下),所以请也试试这个。

就我而言,问题在于我有两个版本的 ld:/usr/bin/ld 和 /opt/local/bin/ld。不知何故,clang 在两个版本的 ld 上都可以正常工作,但 GNU gcc 只能在 /usr/bin/ld 上正常工作。

所以我改变了 PATH 变量来告诉 GNU gcc 使用 /usr/bin/ld,然后问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2015-05-23
    • 2016-11-18
    相关资源
    最近更新 更多