1. 程式人生 > >GCC編譯器引數書寫問題

GCC編譯器引數書寫問題

$ gcc -o -g firstdrvtest firstdrvtest.c

報錯:

firstdrvtest: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here
firstdrvtest: In function `data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_
64-linux-gnu/crt1.o:(.data+0x0): first defined here firstdrvtest: In function `data_start': (.data+0x8): multiple definition of `__dso_handle' /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o:(.data+0x0): first defined here firstdrvtest:(.rodata+0x0): multiple definition of `_IO_stdin_used' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_
64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here firstdrvtest: In function `_start': (.text+0x0): multiple definition of `_start' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here firstdrvtest: In function `_init': (.init+0x0): multiple definition of `_init' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_
64-linux-gnu/crti.o:(.init+0x0): first defined here /tmp/ccztJcA4.o: In function `main': firstdrvtest.c:(.text+0x0): multiple definition of `main' firstdrvtest:(.text+0xf6): first defined here /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__' firstdrvtest:(.data+0x10): first defined here /usr/bin/ld: error in firstdrvtest(.eh_frame); no .eh_frame_hdr table will be created. collect2: error: ld returned 1 exit status

在網上搜索後才知道,這是因為-g是選項,後面不需要給引數,而-o是引數,後面需要加上輸出檔名稱,所以,gcc -o -g firstdrvtest firstdrvtest.c,會生成一個-g的輸出檔案,而後面的firstdrvtest就成非法引數了。
正確的寫法是gcc -g -o firstdrvtest firstdrvtest.c,讓-g在-o之後,編譯器就不會報告這樣的錯誤了。