在OSX 10.9上编译C++代码出现问题

18

更新:

最终我通过重新安装命令行工具解决了问题,可以参考这个链接。 对于造成的不便,我非常抱歉!

最初的问题:

我刚升级到OSX Mavericks,现在编译器无法正常工作了。 我之前一直使用macports中的gcc48、vim/sb2等工具,一切都很顺利。现在只要我包含任何库文件,编译就会报错。我没有太多经验,不知道该怎么做,也不知道该搜索什么。我只想让它像以前一样正常工作。以下是编译基本的“hello world”程序时出现的错误信息:

In file included from /opt/local/include/gcc48/c++/bits/postypes.h:40:0,
             from /opt/local/include/gcc48/c++/iosfwd:40,
             from /opt/local/include/gcc48/c++/ios:38,
             from /opt/local/include/gcc48/c++/ostream:38,
             from /opt/local/include/gcc48/c++/iostream:39,
             from ceva.cpp:1:
/opt/local/include/gcc48/c++/cwchar:44:19: fatal error: wchar.h: No such file or directory
#include <wchar.h>
如果你需要任何信息,请告诉我,我会向你提供。感谢您的耐心!

XCode 和 clang 怎么样? - Frank Osterfeld
对于其他没有成功的人,请尝试以下方法:cd /Library/Developer/CommandLineTools/Packages/ 然后 open . 再双击pkg。 - Anti Earth
5个回答

27
[2019年新增 - Mojave/Catalina] XCode 10已经移除了在/usr/include中放置头文件的操作,即使使用命令行工具也是如此。如果您需要头文件,并且您正在Mojave上,则应该能够安装一个过渡包,该包在Mojave上可用。但是,这个包在Catalina上不再存在。相应版本的SDK中包含有这些头文件。
XCode 5/Mavericks已更改了头文件的默认位置。
在之前的Mac OS X/XCode版本中,您可以在/usr/include中找到头文件。
当您在旧版本上构建gcc时,它会从那个位置获取头文件,并且现在在尝试构建代码时仍会在那里查找它们。
问题在于文件不在那里,而是在/Applications/Xcode.app/Contents/Developer下的某个地方。
您可以通过修改规范文件来让它再次正常工作,但最明智的做法是重新构建gcc。
正如之前提到的,您可以使用xcode-select --install安装命令行工具,这将重新安装开发人员工具,包括/usr/include中的头文件。
我倾向于在升级操作系统时重新安装诸如gcc之类的东西,因为环境发生变化会导致其他错误。这只是我养成的习惯。这可能不是最好的习惯,但在许多场合下它为我节省了痛苦。
【2017年新增】作为补充,如果您安装了command line tools,则头文件也将放置在/usr/include中。安装命令行工具的命令是xcode-select --install - 这将使您能够在不必手动指定头文件位置的情况下使用大多数编译器。

14

以下是我在Mac OS X Mavericks上使其工作的方式:

  1. 打开终端

  2. 输入 --> xcode-select --install

  3. 将会出现一个弹出窗口询问您是否安装工具

  4. 选择安装工具

  5. 等待安装完成


2
当我尝试这样做时,它显示软件不可从软件更新服务器获取 - 它已被下架了吗? - JMzance
1
也许可以尝试下面的方法? - uplearned.com

10

指出手动安装方法加1分。有时候你的系统不允许你采用简单的方式来完成安装。 - Andrei

2
我是MacOs Sierra 10.12.4用户,也遇到这个问题。 我通过使用以下方法解决了它:
/usr/bin/gcc

1
这是使用 clang,因此不能解决无法使用 gcc 的问题。 - Anti Earth

0

对我来说,解决方法是卸载旧的损坏的gcc:

brew uninstall gcc@5

我注意到在构建输出中出现了像 /usr/local/Cellar/gcc@5 这样的路径,而实际上应该使用已安装的 gcc@8


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接