0

I am not sure why I am receiving these errors, when I compile with GCC and do not use -Wall and -Wextra the program compiles fine. However, when I use the flags -Wall and -Wextra I receive compile errors.

Here is the test program I ran:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
    return 0;
}

... and here are the errors I get from that:

/home/definity/Desktop/Cloud/code/funcptr: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here
/home/definity/Desktop/Cloud/code/funcptr: In function `data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here
/home/definity/Desktop/Cloud/code/funcptr: In function `data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o:(.data+0x0): first defined here
/home/definity/Desktop/Cloud/code/funcptr:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
/home/definity/Desktop/Cloud/code/funcptr: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here
/home/definity/Desktop/Cloud/code/funcptr: In function `main':
/home/definity/Desktop/Cloud/code/funcptr.c:35: multiple definition of `main'
/tmp/cctHUnUj.o:/home/definity/Desktop/Cloud/code/funcptr.c:9: first defined here
/home/definity/Desktop/Cloud/code/funcptr: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.7/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'
/home/definity/Desktop/Cloud/code/funcptr:(.data+0x10): first defined here
/usr/bin/ld: error in /home/definity/Desktop/Cloud/code/funcptr(.eh_frame); no .eh_frame_hdr table will be created.
collect2: error: ld returned 1 exit status
[Finished in 0.1s with exit code 1]

... I am not able to interpret these errors. Can someone explain why these errors occurring and what I can do to prevent this from happening in the future?

4

1 回答 1

2

基于此链接

    -Wall
            This enables all the warnings about constructions that some users consider 
questionable, and that are easy to avoid (or modify to prevent the warning), even in 
conjunction with macros. This also enables some language-specific warnings described in C++ Dialect Options and Objective-C and Objective-C++ Dialect Options.

            -Wall turns on the following warning flags:

                      -Waddress   
                      -Warray-bounds (only with -O2)  
                      -Wc++11-compat  
                      -Wchar-subscripts  
                      -Wenum-compare (in C/ObjC; this is on by default in C++) 
                      -Wimplicit-int (C and Objective-C only) 
                      -Wimplicit-function-declaration (C and Objective-C only) 
                      -Wcomment  
                      -Wformat   
                      -Wmain (only for C/ObjC and unless -ffreestanding)  
                      -Wmaybe-uninitialized 
                      -Wmissing-braces (only for C/ObjC) 
                      -Wnonnull  
                      -Wparentheses  
                      -...

            Note that some warning flags are not implied by -Wall. Some of them warn about 
        constructions that users generally do not consider questionable, but which occasionally you might wish to check for; others warn about constructions that are necessary or hard to
    avoid in some cases, and there is no simple way to modify the code to suppress the warning. 
    Some of them are enabled by -Wextra but many of them must be enabled individually. 
于 2013-08-16T02:28:12.320 回答