MacOS“configure:error:cannot run C compiled programs”意思是无法运行C编译程序。

13

我对MacOS环境还不太熟悉,之前在编译C脚本时遇到了一些问题。我的问题如下:

fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                   ^
compilation terminated.

我尝试重新安装xcode-select --install,但一直提示:

xcode-select: error: 命令行工具已经安装,请使用“软件更新”安装更新

我已经更新了一切,但问题依然存在。显然是因为我没有/usr/includes文件。我找到了一种方法来编译我的软件,使用:

/Library/Developer/CommandLineTools/usr/bin/g++ XXXX.cpp

然而,现在我正在尝试./compilemake另一个软件,但我不知道如何默认使用这个gcc解释器。当我尝试执行./configure时,我得到以下错误:

configure: error: 无法运行C编译程序。如果您想交叉编译,请使用“--host”。有关详细信息,请参见“config.log”

因此,当我查看config.log时:

configure:3224: checking for gcc
configure:3240: found /usr/local/bin/gcc
configure:3251: result: gcc
configure:3282: checking for C compiler version
configure:3291: gcc --version >&5
gcc (GCC) 4.9.2 20141029 (prerelease)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3302: $? = 0
configure:3291: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/lto-wrapper
Target: x86_64-apple-darwin14.0.0
Configured with: ../gcc-4.9-20141029/configure --enable-languages=c++,fortran
Thread model: posix
gcc version 4.9.2 20141029 (prerelease) (GCC) 
configure:3302: $? = 0
configure:3291: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3302: $? = 1
configure:3291: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:3302: $? = 1
configure:3322: checking whether the C compiler works
configure:3344: gcc    conftest.c  >&5
configure:3348: $? = 0
configure:3396: result: yes
configure:3399: checking for C compiler default output file name
configure:3401: result: a.out
configure:3407: checking for suffix of executables
configure:3414: gcc -o conftest    conftest.c  >&5
configure:3418: $? = 0
configure:3440: result: 
configure:3462: checking whether we are cross compiling
configure:3470: gcc -o conftest    conftest.c  >&5
conftest.c:15:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                   ^
compilation terminated.
configure:3474: $? = 1
configure:3481: ./conftest
./configure: line 3483: ./conftest: No such file or directory
configure:3485: $? = 127
configure:3492: error: in `/Users/XXXX/phyml':
configure:3494: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

你有任何想法可以修复它吗?

非常感谢!


/usr/includes 文件不存在;你的意思是说你没有 /usr/include 文件夹吗?如果是这样...那是怎么发生的? - Amadan
是的,抱歉我在谈论 /usr/include 文件夹。由于我没有它,所以我不知道它是“include”还是“includes”..但是我不明白..我非常想回到Linux,但我不能..而且这个xcode东西无法重新安装 /usr/include 文件夹 :/ - Eddie
这个能帮到你吗?(不要真的删除,只是把它们移到别处以防万一) - Amadan
5
在升级到Mojave后,我无法在Mac上编译C程序。我收到以下错误消息:fatal error: 'stdio.h' file not found #include ^~~~~~~~~ 1 error generated.我该如何解决这个问题? - melpomene
谢谢你的帮助,但我已经尝试过了,它不起作用!我重新尝试了所有步骤,但仍然无法正常工作。我还尝试了“sudo gem install xcode-install”,但仍然没有解决问题.. :/ - Eddie
显示剩余2条评论
1个回答

17

由于Melpomene在对这个问题的小评论中的答案非常容易被忽略,因此我在这里发布以供大家查看。这个错误通常意味着您缺少已从Xcode中删除的编译工具(实际上是头文件)。

您可以在 /Library/Developer/CommandLineTools/Packages/ 找到它们,因为它们的名称可能会因为不同版本的macOS而有所不同。

假设您正在运行macOS Mojave(10.14),则需要运行:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

然后,一个类似于macOS的软件包安装程序将启动,并要求您输入管理员密码。这是一个官方的苹果软件包,虽然从一个随机目录安装某些东西可能会让人感到奇怪,但您可以信任它。当然,您不必相信我的话。苹果在Xcode 10版本说明中隐藏了这个更改,您可以在此处找到他们的解释:https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035623

如果此链接消失或被更改,我在这里复制一下:

  

命令行工具包将macOS系统头文件安装在macOS SDK内。使用已安装的工具编译的软件将在以下位置搜索由Xcode提供的macOS SDK中的头文件:

     

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

     

或由命令行工具提供的:

     

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

     

取决于使用xcode-select选择哪个。

     

命令行工具默认情况下将在SDK中搜索系统头文件。然而,某些软件可能无法正确地针对SDK进行构建,并需要将macOS头文件安装在基本系统的/usr/include目录下。如果您是这种软件的维护者,我们建议您更新您的项目以与SDK一起工作,或为防止您这样做而导致的问题提交错误报告。作为解决方法,提供了一个额外的软件包,该软件包将安装头文件到基本系统中。在将来的版本中,将不再提供此软件包。您可以在以下位置找到此软件包:

     

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg    
> 确保在安装后使用xcode-select -s或xcode select -s /Library/Developer/CommandLineTools运行,以确保您正在使用预期的命令行工具版本。


2
为什么会显示“macOS_SDK_headers_for_macOS_10.14.pkg不存在”?我正在使用macOS 10.15.3。 - WCMC
@WCMC 这个解决方案仅适用于Mac OS 10.14 Mojave。有关Mac OS 10.15 Catalina的信息,请参见此处:https://apple.stackexchange.com/questions/373316/missing-headers-in-macos-10-15-catalina - Tom Kelly

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