Undefined reference to main - collect2: ld returned 1 exit status

后端 未结 7 2155
栀梦
栀梦 2020-12-07 22:43

I\'m trying to compile a program (called es3), but, when I write from terminal:

gcc es3.c -o es3

it appears this message:

/usr/l         


        
相关标签:
7条回答
  • 2020-12-07 22:44

    Perhaps your main function has been commented out because of e.g. preprocessing. To learn what preprocessing is doing, try gcc -C -E es3.c > es3.i then look with an editor into the generated file es3.i (and search main inside it).

    First, you should always (since you are a newbie) compile with

      gcc -Wall -g -c es3.c
      gcc -Wall -g es3.o -o es3
    

    The -Wall flag is extremely important, and you should always use it. It tells the compiler to give you (almost) all warnings. And you should always listen to the warnings, i.e. correct your source code file es3.C till you got no more warnings.

    The -g flag is important also, because it asks gcc to put debugging information in the object file and the executable. Then you are able to use a debugger (like gdb) to debug your program.

    To get the list of symbols in an object file or an executable, you can use nm.

    Of course, I'm assuming you use a GNU/Linux system (and I invite you to use GNU/Linux if you don't use it already).

    0 讨论(0)
  • 2020-12-07 22:47

    It means that es3.c does not define a main function, and you are attempting to create an executable out of it. An executable needs to have an entry point, thereby the linker complains.

    To compile only to an object file, use the -c option:

    gcc es3.c -c
    gcc es3.o main.c -o es3
    

    The above compiles es3.c to an object file, then compiles a file main.c that would contain the main function, and the linker merges es3.o and main.o into an executable called es3.

    0 讨论(0)
  • 2020-12-07 22:53

    One possibility which has not been mentioned so far is that you might not be editing the file you think you are. i.e. your editor might have a different cwd than you had in mind.

    Run 'more' on the file you're compiling to double check that it does indeed have the contents you hope it does. Hope that helps!

    0 讨论(0)
  • 2020-12-07 22:56

    In my case it was just because I had not Saved the source file and was trying to compile a empty file .

    0 讨论(0)
  • 2020-12-07 23:00

    I my case I found out the void for the main function declaration was missing.

    I was previously using Visual Studio in Windows and this was never a problem, so I thought I might leave it out now too.

    0 讨论(0)
  • 2020-12-07 23:08

    You can just add a main function to resolve this problem. Just like:

    int main()
    {
        return 0;
    }
    
    0 讨论(0)
提交回复
热议问题