7

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.

Braiam
  • 67,791
  • 32
  • 179
  • 269
Sketch
  • 103
  • 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
  • jesus how could I do such a stupid mistake... noober than i thought. anyway, do you know why text editors wont recognize the libraries? – Sketch Jan 17 '18 at 16:48
  • 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
  • Btw, nothing wrong with Sublime Text, but industry generally uses the free Eclipse CDT. Use whichever you prefer, but learn about setting breakpoints; these will allow you to run your code and stop at any line you mark as a breakpoint, then examine & change variable values, look at the call stack, to see which function called which, called ... and with which parameters. You can then step through your code a line at a time, if you want to. – Mawg says reinstate Monica Jan 18 '18 at 14:40
  • When you code gives problems, ask at StackOVerflow but be sure to 1) post your code 2) say what it is supposed to do 3) describe what it is doing wrongly. If you do that, people can help you – Mawg says reinstate Monica Jan 18 '18 at 14:42
  • 1
    And also, be aare of our Code Review site. you can post *working* code there and others will read it an recommend ways to improve it. This can help make you a better coder. If you don't want to post your own code, read other people's reviews. Try reading & understanding the code first, before you read the suggestions for improvement. Soon you will be able to make suggestions. – Mawg says reinstate Monica Jan 18 '18 at 14:44
  • 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
  • Well, my subset is professional embedded developers. Obviously, YMMV, but I would be very surprised if any respectable employer required, or even allowed, its employees to use a plain text editor, rather than an IDE with an integrated debugger. I am aware of the others, and have used most of them in my day. I am personally very fond of NetBeans, which you omitted to mention. – Mawg says reinstate Monica Jan 18 '18 at 20:53
  • I don't think that it really matters, just so long as an IDE with integrated debugger is used, but in a few decades of freelancing on three continents, I can't remember the last embedded coding gig that did not use Eclipse. Anyway, let's not argue, I hope that you will also recommend the OP, who his just starting out, to use an IDE with integrated debugger. – Mawg says reinstate Monica Jan 18 '18 at 20:53
  • you can't run ./hello.c but just ./hello, which is the compiled file that has to be executed. – Donald Shahini Jan 20 '18 at 13:16

2 Answers2

39

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
nickcrabtree
  • 1,194
  • 11
  • 19
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 
psmears
  • 138
  • 4
N0rbert
  • 99,918
  • 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