Saya memiliki beberapa unistd.h
file di Ubuntu Linux saya. Saya punya satu /usr/include/asm/unistd.h
. File ini memiliki arahan ini:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
Dalam folder itu, saya dapat menemukan file-file itu ( unistd_32.h
dan unistd_64.h
).
Tetapi /usr/src/linux-headers-2.6.31-22/include/asm-generic/
ada satu lagi unistd.h
yang dimulai dengan arahan ini:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Jadi, pertanyaannya adalah: Bagaimana saya bisa tahu yang mana yang dimuat? Apakah ada cara untuk memeriksanya di runtime dengan Java?
unistd.h
apakah file header C; apa hubungannya dengan Java?Jawaban:
Aturan pasti yang diikuti oleh
gcc
kompiler untuk menemukan file termasuk dijelaskan di: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.htmlTrik baris perintah cepat untuk mencari tahu dari mana file include berasal adalah sebagai berikut: 1
Kemudian, jika Anda melihat
unistd.preprocessed
file, Anda akan melihat baris seperti:Ini memberi tahu Anda bahwa blok baris berikut (sampai
# number ...
baris berikutnya ) berasal dari file/usr/include/unistd.h
.Jadi, jika Anda ingin mengetahui daftar lengkap file yang disertakan, Anda dapat menerima
# number
baris:Pada sistem Ubuntu 10.04 / gcc 4.4.3 saya, ini menghasilkan:
1 Catatan: Jalur pencarian untuk menyertakan file dimodifikasi oleh
-I
opsi baris perintah; jadi, Anda harus menambahkan-I path
argumen apa pun padagcc
doa. Juga, jika Anda mengkompilasi sumber C ++, Anda harus menggantinya-x c
dengan-x c++
.sumber