Saya baru-baru ini memiliki proyek kelas di mana saya harus membuat program dengan G ++.
Saya menggunakan makefile dan untuk beberapa alasan terkadang meninggalkan file .h.gch.
Terkadang, hal ini tidak memengaruhi kompilasi, tetapi sering kali hal ini akan mengakibatkan kompiler mengeluarkan kesalahan untuk masalah yang telah diperbaiki atau yang tidak masuk akal.
Saya punya dua pertanyaan:
1) Apa itu file .h.gch dan digunakan untuk apa? dan
2) Mengapa hal itu menyebabkan masalah seperti itu jika tidak dibersihkan?
Jawaban:
Sebuah
.gch
file adalah header dikompilasi.Jika a
.gch
tidak ditemukan maka file header normal akan digunakan.Namun, jika proyek Anda disetel untuk menghasilkan header yang telah dikompilasi sebelumnya, itu akan membuatnya jika tidak ada dan menggunakannya di build berikutnya.
Kadang-kadang
*.h.gch
akan rusak atau berisi informasi usang, jadi menghapus file itu dan mengompilasinya lagi akan memperbaikinya.sumber
Jika Anda ingin mengetahui tentang sebuah file, cukup ketik di terminal
file a.h.gch
memberikan:sumber
.h.gch
file. Saya menduga Anda memerlukan file database yang tepat untuk ini.Ini adalah header yang telah dikompilasi GCC.
Wikipedia memiliki penjelasan yang setengah layak, http://en.wikipedia.org/wiki/Precompiled_header
sumber
a) Mereka adalah header yang telah dikompilasi sebelumnya: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b) Mereka berisi informasi "cache" dari file .h dan harus diperbarui setiap kali Anda mengubah file .h masing-masing. Jika itu tidak terjadi - Anda memiliki set dependensi yang salah dalam proyek Anda
sumber
Jawaban lain sepenuhnya akurat sehubungan dengan apa itu file gch. Namun, konteks (dalam hal ini, pemula yang menggunakan g ++) adalah segalanya. Dalam konteks ini, ada dua aturan:
Jangan pernah meletakkan file .h pada baris kompilasi g ++. Hanya file .cpp. Jika file .h pernah terkompilasi secara tidak sengaja, hapus file * .gch apa pun
Jangan pernah meletakkan file .cpp dalam pernyataan #include.
Jika aturan satu dilanggar, pada titik tertentu masalah yang dijelaskan dalam pertanyaan akan terjadi. Jika aturan dua dilanggar, di beberapa titik linker akan mengeluh tentang simbol yang didefinisikan banyak.
sumber