6

I'm trying to write a basic program in C using gedit or sublime text (which I prefer), but no matter what I do when I try to compile or run, or even while writing, I have no option to use 'stdio.h' or any similar package. Even when I start typing #include <st the only word completion sublime suggests is 'struct'.

I've read dozens of threads, but all managed to fix this by installing gcc, which I've tried to reinstall multiple times, with no luck.

This is the output from gcc -v:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.2.0-8ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3) `

This is the code:

#include <stdio.h>

int main(void)
{
printf("hello, world\n");
}

When I compile using gcc, I get nothing, no error at least. but when I try to run using just ./hello.c this is what I get.

  • 11
    You don't run the hello.c file - you run the executable file that's produced by running gcc on the hello.c file – steeldriver Jan 17 '18 at 16:44
  • 4
    A text editor is just a text editor - it's not like a dedicated IDE (that might be programmed to complete filenames) - although some (including gedit) may offer syntax highlighting – steeldriver Jan 17 '18 at 17:04
  • 2
    It isn't a stupid mistake, it's just that you weren't aware. This is part of the learning process, though it often comes (as per my own experience back in the day) from skipping through learning material instead of paying close attention to it. There will very likely be plugins for Sublime Text to help with recognising libraries, so keep an eye out. – Jake Jan 17 '18 at 19:02
  • 1
    Don't worry, I made exactly the same mistake when I first learned to write C. It isn't obvious at first what the compiler outputs, but now you can go on and make a tonne of brand new mistakes. Welcome to programming... – DrMcCleod Jan 18 '18 at 11:40
  • 2
    @Mawg: That depends on which subset of "industry" you mean. The subset using Eclipse CDT does, of course. Personally, I've never met a person (online or offline) using Eclipse regularly; instead, they used some text editor (Sublime, Emacs, vi, Notepad++, SciTe, pico), some shell (most often bash), and gcc or ICC, or an IDE like MSVC (despite not being a fully compliant C environment), Code::Blocks or something. But that's just my own humble experience which I stated for the lack of a representative statistics search result. – phresnel Jan 18 '18 at 16:50
38

gcc creates an executable file called a.out by default. Run that instead.

Alternatively, create a sensible named executable:

gcc -o hello hello.c

And even simpler, using the default rules built into make:

make hello
  • And who will write Makefile?! – N0rbert Jan 17 '18 at 16:49
  • 19
    You don't have to have a makefile to use make! Try it and see... – nickcrabtree Jan 17 '18 at 16:51
  • Great, it really works. – N0rbert Jan 17 '18 at 16:52
  • 1
    I've updated my answer to link to the relevant part of the Gnu make documentation – nickcrabtree Jan 17 '18 at 16:52
  • for me it returns : make: Nothing to be done for 'init.c'. – Sketch Jan 17 '18 at 16:53
11

You need to install the corresponding package with the headers (normally libc6-dev) with

sudo apt-get install libc6-dev

And for sure install build-essential with

sudo apt-get install build-essential

Then compile your hello.c with the command:

gcc hello.c -o hello

and run it:

./hello 
  • 2
    I think i installed those a thousand times. but the last part, someone already commented it, worked. thanks! – Sketch Jan 17 '18 at 16:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.