GNU/Linux >> Belajar Linux >  >> Linux

15 Opsi Baris Perintah Kompilator GCC yang Paling Sering Digunakan

GCC Compiler adalah compiler C yang sangat kuat dan populer untuk berbagai distribusi Linux. Artikel ini menjelaskan beberapa opsi compiler GCC yang populer.

Contoh Kode C

Berikut kode C dasar (main.c) yang akan digunakan dalam artikel ini :

#include<stdio.h>

int main(void)
{
   printf("\n The Geek Stuff\n");
   return 0;
}

Opsi Kompilator GCC

1. Tentukan Nama Output yang Dapat Dieksekusi

Dalam bentuknya yang paling dasar, compiler gcc dapat digunakan sebagai :

gcc main.c

Perintah di atas mengeksekusi proses kompilasi lengkap dan mengeluarkan executable dengan nama a.out.

Gunakan opsi -o, seperti yang ditunjukkan di bawah ini, untuk menentukan nama file keluaran untuk yang dapat dieksekusi.

gcc main.c -o main

Perintah di atas akan menghasilkan file output dengan nama 'main'.

Untuk memahami proses kompilasi lengkap dari kompiler GCC, baca artikel kami Perjalanan Program C ke Linux yang Dapat Dieksekusi dalam 4 Tahap.

2. Aktifkan semua peringatan yang disetel melalui opsi -Wall

Opsi ini mengaktifkan semua peringatan di GCC.

#include<stdio.h>

int main(void)
{
   int i;
   printf("\n The Geek Stuff [%d]\n", i);
   return 0;
}

Jika kode di atas dikompilasi, peringatan berikut terkait dengan variabel yang tidak diinisialisasi i dihasilkan:

$ gcc -Wall main.c -o main
main.c: In function ‘main’:
main.c:6:10: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

3. Hanya menghasilkan output praprosesor dengan opsi -E

Output dari tahap preprocessing dapat dihasilkan dengan menggunakan opsi -E.

$ gcc -E main.c > main.i

Perintah gcc menghasilkan output pada stdout sehingga Anda dapat mengarahkan output dalam file apa pun. Dalam kasus kami (di atas), file main.i akan berisi output yang telah diproses sebelumnya.

4. Hanya menghasilkan kode perakitan menggunakan opsi -S

Output tingkat perakitan dapat diproduksi menggunakan opsi -S.

gcc -S main.c > main.s

Dalam hal ini, file main.s akan berisi keluaran assembly.

5. Hasilkan hanya kode yang dikompilasi menggunakan opsi -C

Untuk menghasilkan hanya kode yang dikompilasi (tanpa tautan apa pun), gunakan opsi -C.

gcc -C main.c

Perintah di atas akan menghasilkan file main.o yang akan berisi kode level mesin atau kode yang dikompilasi.

6. Hasilkan semua file perantara menggunakan fungsi -save-temps

Opsi -save-temps dapat melakukan semua pekerjaan yang dilakukan pada contoh 4,5 dan 6 di atas. Melalui opsi ini, output pada semua tahapan kompilasi disimpan di direktori saat ini. Harap perhatikan bahwa opsi ini juga menghasilkan yang dapat dieksekusi.

Misalnya :

$ gcc -save-temps main.c

$ ls
a.out  main.c  main.i  main.o  main.s

Jadi kita melihat bahwa semua file perantara serta executable akhir dihasilkan dalam output.

7. Tautkan dengan perpustakaan bersama menggunakan opsi -l

Opsi -l dapat digunakan untuk menautkan dengan pustaka bersama. Misalnya:

gcc  -Wall main.c -o main -lCPPfile

Perintah gcc yang disebutkan di atas menautkan kode main.c dengan pustaka bersama libCPPfile.so untuk menghasilkan 'main' akhir yang dapat dieksekusi.

8. Buat kode posisi independen menggunakan opsi -fPIC

Saat membuat pustaka bersama, kode independen posisi harus dibuat. Ini membantu perpustakaan bersama untuk dimuat sebagai alamat apa pun alih-alih beberapa alamat tetap. Untuk opsi -fPIC ini digunakan.

Misalnya, perintah berikut membuat pustaka bersama libCfile.so dari file sumber Cfile.c:

$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o

Jadi kami melihat bahwa opsi -fPIC digunakan dalam pembuatan pustaka bersama.

9. Cetak semua perintah yang dieksekusi menggunakan opsi -V

Opsi -v dapat digunakan untuk memberikan informasi verbose tentang semua langkah yang dilakukan gcc saat mengompilasi file sumber.

Misalnya :

$ gcc -Wall -v main.c -o main
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
...
...
...

Jadi kami melihat bahwa informasi rinci dihasilkan dalam output.

10. Aktifkan dukungan program ISO C89 menggunakan opsi -ansi

Melalui opsi -ansi, dukungan untuk gaya ISO C89 diaktifkan.

Perhatikan kode berikut :

#include<stdio.h>

int main(void)
{
  // Print the string
   printf("\n The Geek Stuff\n");
   return 0;
}

Jika kode di atas dikompilasi dengan opsi -ansi maka gcc akan menghasilkan kesalahan karena komentar C++ tidak diperbolehkan dalam gaya ISO C89.

Berikut adalah outputnya :

$ gcc -Wall -ansi main.c -o main
main.c: In function ‘main’:
main.c:5:3: error: expected expression before ‘/’ token

Jadi kami melihat bahwa gcc melontarkan kesalahan terkait gaya berkomentar.

11. Menafsirkan char sebagai unsigned char menggunakan opsi -funsigned-char

Melalui opsi ini, tipe karakter diperlakukan sebagai tipe yang tidak ditandatangani.

Ini contohnya :

#include<stdio.h>

int main(void)
{
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Ketika kode di atas dikompilasi dengan opsi funsigned-char, berikut adalah outputnya :

$ gcc -Wall -funsigned-char main.c -o main
$ ./main

 The Geek Stuff [246]

Jadi kita melihat bahwa char memang diperlakukan sebagai unsigned.

12. Menafsirkan char sebagai char yang ditandatangani menggunakan opsi -fsigned-char

Ini adalah kebalikan dari apa yang kita bahas pada (12) di atas. Dengan menggunakan tanda ini, variabel char diperlakukan sebagai tanda.

Ini contohnya :

$ gcc -Wall -fsigned-char main.c -o main
$ ./main

 The Geek Stuff [-10]

Outputnya mengonfirmasi bahwa char diperlakukan sebagai yang ditandatangani.

13. Gunakan makro waktu kompilasi menggunakan opsi -D

Opsi kompiler D dapat digunakan untuk mendefinisikan makro waktu kompilasi dalam kode.

Ini contohnya :

#include<stdio.h>

int main(void)
{
#ifdef MY_MACRO
  printf("\n Macro defined \n");
#endif
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Opsi kompiler -D dapat digunakan untuk mendefinisikan makro MY_MACRO dari baris perintah.

$ gcc -Wall -DMY_MACRO main.c -o main
$ ./main

 Macro defined 

 The Geek Stuff [-10]

Cetakan yang terkait dengan makro dalam output mengonfirmasi bahwa makro telah ditentukan.

14. Ubah peringatan menjadi kesalahan dengan opsi -Werror

Melalui opsi ini, peringatan apa pun yang dapat dilaporkan gcc akan diubah menjadi kesalahan.

Ini contohnya :

#include<stdio.h>

int main(void)
{
  char c;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Kompilasi kode di atas akan menghasilkan peringatan terkait dengan variabel tidak terdefinisi c dan ini akan diubah menjadi kesalahan dengan menggunakan opsi -Werror.

$ gcc -Wall -Werror main.c -o main
main.c: In function ‘main’:
main.c:7:10: error: ‘c’ is used uninitialized in this function [-Werror=uninitialized]
cc1: all warnings being treated as errors

15. Berikan opsi gcc melalui file menggunakan opsi @

Opsi untuk gcc juga dapat diberikan melalui file. Ini dapat dilakukan dengan menggunakan opsi @ diikuti dengan nama file yang berisi opsi. Lebih dari satu opsi dipisahkan oleh spasi.

Ini contohnya :

$ cat opt_file 
-Wall -omain

Opt_file berisi opsi.

Sekarang kompilasi kode dengan menyediakan opt_file bersama dengan opsi @.

$ gcc main.c @opt_file
main.c: In function ‘main’:
main.c:6:11: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

$ ls main
main

Output mengonfirmasi bahwa file opt_file telah diurai untuk mendapatkan opsi dan kompilasi telah dilakukan.


Linux
  1. dpkg-konfigurasi ulang Opsi Perintah

  2. Bagaimana cara melihat perintah linux yang paling sering saya gunakan?

  3. Apakah CTRL+C salah digunakan untuk kembali ke baris perintah?

  1. Opsi yang sering digunakan untuk perintah dpkg debian / ubuntu

  2. 40 Perintah Dasar Linux yang Sering Digunakan

  3. Opsi ps yang berguna

  1. [Linux]:15 Perintah YUM yang paling sering digunakan dengan contoh

  2. Unduh Lembar Cheat Antarmuka Baris Perintah OpenStack! – Perintah yang Paling Sering Digunakan

  3. 25 Contoh Aturan IPTables Linux yang Paling Sering Digunakan