GCC fatal error: stdio.h: No such file or directory

255,554

Solution 1

macOS

I had this problem too (encountered through Macports compilers). Previous versions of Xcode would let you install command line tools through xcode/Preferences, but xcode5 doesn't give a command line tools option in the GUI, that so I assumed it was automatically included now. Try running this command:

xcode-select --install

If you see an error message that developer tools are already installed (and still header files can't be found), wipe out any existing one to do a fresh installation:

sudo rm -rf /Library/Developer/CommandLineTools

Ubuntu

(as per this answer)

sudo apt-get install libc6-dev

Alpine Linux

(as per this comment)

apk add libc-dev

Solution 2

Mac OS Mojave

The accepted answer no longer works. When running the command xcode-select --install it tells you to use "Software Update" to install updates.

In this link is the updated method:

Open a Terminal and then:

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

This will open an installation Wizard.

Update 12/2019

After updating to Mojave 10.15.1 it seems that using xcode-select --install works as intended.

Solution 3

ubuntu users:

sudo apt-get install libc6-dev

specially ruby developers that have problem installing gem install json -v '1.8.2' on their VMs

Solution 4

I know my case is rare, but I'll still add it here for someone who troubleshoots it later. I had a Linux Kernel module target in my Makefile and I tried to compile my user space program together with the kernel module that doesn't have stdio. Making it a separate target solved the problem.

Solution 5

I had the same problem. I installed "XCode: development tools" from the app store and it fixed the problem for me.

I think this link will help: https://itunes.apple.com/us/app/xcode/id497799835?mt=12&ls=1

Credit to Yann Ramin for his advice. I think there is a better solution with links, but this was easy and fast.

Good luck!

Share:
255,554

Related videos on Youtube

Jules
Author by

Jules

Expert Python programmer with experience working with the Linux network stack, REST APIs, and relational databases (and Postgres in particular). There's some devops experience in there too, but software dev is my preference. Not currently open to new work.

Updated on January 11, 2022

Comments

  • Jules
    Jules 12 months

    I'm trying to compile a program in C on OS X 10.9 with GCC 4.9 (experimental). For some reason, I'm getting the following error at compile time:

    gcc: fatal error: stdio.h: No such file or directory
    

    I then tried a simple Hello World program:

    #include <stdio.h>
    int main(int argc, const char *argv[])
    {
        printf("Hello, world!");
        return 0;
    }
    

    Again, upon running gcc -o ~/hello ~/hello.c, I got the same error. I'm using an experimental version of gcc, but it seems implausible that there would be a release which generated errors upon importing stdio. What could be causing this issue, and how can it be fixed?

    • Christian Ternus
      Christian Ternus about 9 years
      You can see where gcc is looking for header files by doing echo "#include <bogus.h>" | gcc -v -x c - and examining the search paths.
    • Jules
      Jules about 9 years
      Very useful command! It doesn't look like stdio.h is in any of GCC's search paths.
    • Ivan about 9 years
      Mavericks no longer has a base /usr/include. You need to link it into place from the XCode OS 10.9 SDK.
    • p0lAris
      p0lAris about 9 years
      BTW, int main's first parameter is an int and not int *argc.
    • Jules
      Jules about 9 years
      @YannRamin Thanks, going to try that.
    • Jules
      Jules about 9 years
      @flippex17 Really? I thought it was argument count, and then the argument values.
    • p0lAris
      p0lAris about 9 years
      Yes, it's an integer type.
    • rici
      rici about 9 years
      @user2615799: It is argument count. It's not pointer to argument count.
    • Jules
      Jules about 9 years
      Alright, thanks for the clarification. @YannRamin I'm not sure how to do that, actually. I'm currently at Xcode > Preferences > Locations, but I can't find any options for library locations. Couldn't this be done by setting the $LIBRARY_PATH environment variable?
    • Crowman
      Crowman about 9 years
      No, since headers are not libraries. C_INCLUDE_PATH or the -isystem flag are what you want.
    • Jules
      Jules about 9 years
      I tried setting C_INCLUDE_PATH (previously an empty variable) to the location of stdio.h, but the issue persists. On a possibly related note, I get no issues when I try importing stdio.h in gdb.
    • Ivan about 9 years
      @user2615799 Its at sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.‌​platform/Developer/S‌​DKs/MacOSX10.9.sdk/u‌​sr/include /usr/include
    • Michael
      Michael over 5 years
      @YannRamin Location changed, but when I fix that I get ln: /usr/include: Operation not permitted. Running as sudo!
  • Sjors Provoost
    Sjors Provoost over 8 years
    If you're using Xcode 6 beta 5, this command might fail. In that case you need to do sudo xcode-select -s /Applications/Xcode.app. When you're done, switch back using sudo xcode-select -s /Applications/Xcode6-Beta5.app.
  • dhaupin
    dhaupin over 6 years
    Interesting. Thanks. This lib also solves some other issues. Recently, I encountered it trying to run a benchmark for petabyet.com (which uses gcc).
  • Shadi
    Shadi almost 6 years
    On alpine linux I needed apk add libc-dev
  • user124384 over 5 years
    Are you referring to just normal Xcode? Or is there some special version called "XCode: development tools"? Because I only see normal Xcode in the App Store. Granted, this is 4 years into the future from when this answer was posted.
  • user124384 over 5 years
    Wow. Still working with Xcode 8.0 and Sierra in 2017.
  • VanDavv
    VanDavv over 4 years
    Alpine guide is extremely usefull for Docker images based on alpine distro, works as wanted
  • Bojan Dimovski over 3 years
    Reinstalling the headers works also when upgrading to Xcode 10.2.
  • Steve Siegel
    Steve Siegel about 3 years
    When I open macOS_SDK_headers_for_macOS_10.14.pkg, I get a scary Warning from the Installer: "This package is incompatible with this version of macOS and may fail to install." I have Mojave.
  • Samshel about 3 years
    @SteveSiegel what Mac OS version are you running? I upgraded to 10.15.1 and I no longer had to do this workaround. Updated my answer to reflect that.
  • Ratul Hasan
    Ratul Hasan over 2 years
    any suggestion for windows users? I am having this problem on windows
  • Admin
    Admin over 2 years
    "updating to Mojave 10.15.1" that's incorrect. @SteveSiegel The pkg is deprecated. SDKROOT should be used. stackoverflow.com/a/63343829/10063119
  • Admin
    Admin about 2 years
    For macOS users who're still having problems after installing CLTs stackoverflow.com/questions/63342521/…
  • Jongwook Choi
    Jongwook Choi 12 months
    In some situations, you may need to run sudo rm -rf /Library/Developer/CommandLineTools to wipe out any existing installations before running xcode-select --install.