ฉันจะรู้ได้อย่างไรว่าไฟล์ unistd.h ใดที่ถูกโหลด?


11

ฉันมีหลายunistd.hไฟล์ใน Ubuntu Linux /usr/include/asm/unistd.hฉันหนึ่ง ไฟล์นี้มีคำสั่งนี้:

# ifdef __i386__
#  include "unistd_32.h"
# else
#  include "unistd_64.h"
# endif

ในโฟลเดอร์นั้นฉันสามารถค้นหาไฟล์เหล่านั้น ( unistd_32.hและunistd_64.h)

แต่/usr/src/linux-headers-2.6.31-22/include/asm-generic/มีอีกสิ่งหนึ่งunistd.hที่เริ่มต้นด้วยคำสั่งนี้:

#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H

ดังนั้นคำถามคือฉันจะรู้ได้อย่างไรว่าอันไหนที่โหลด? มีวิธีการตรวจสอบใด ๆ ในรันไทม์กับ Java?


1
ฉันไม่เข้าใจคำถามครึ่งหลังของคุณ: unistd.hเป็นไฟล์ส่วนหัว C Java ใช้กับอะไรได้บ้าง
Riccardo Murri

@ Riccardo ฉันต้องการโทรผ่านระบบที่กำหนดไว้ในไฟล์นั้น
santiago.basulto

@ user1531 ไฟล์ Header ถูกรวมไว้เป็นขั้นตอนแรกของการคอมไพล์ดังนั้นจึงไม่จำเป็นที่รันไทม์ (คุณสามารถเรียกใช้โค้ดบนระบบที่ไม่มีคอมไพเลอร์หรือสภาพแวดล้อมการพัฒนาติดตั้ง) ฟังก์ชั่นการโทรจาก C จาก Java เป็นหัวข้อสำหรับคำถามที่แตกต่างกันโดยสิ้นเชิง - ซึ่งคุณดูเหมือนจะถามแล้ว :-)
Riccardo Murri

คำตอบ:


12

กฎที่ถูกต้องตามด้วยgccคอมไพเลอร์สำหรับการค้นหารวมไฟล์มีการอธิบายที่: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

เคล็ดลับบรรทัดคำสั่งฉบับย่อเพื่อค้นหาว่าไฟล์รวมมาจากไหนดังต่อไปนี้: 1

echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed

จากนั้นหากคุณดูunistd.preprocessedไฟล์คุณจะสังเกตเห็นบรรทัดต่างๆดังนี้:

# 1 "/usr/include/unistd.h" <some numbers>

เหล่านี้จะบอกคุณว่าบล็อกต่อไปของเส้น (จนถึงถัดไป# number ...บรรทัด) /usr/include/unistd.hมาจากไฟล์

ดังนั้นหากคุณต้องการทราบรายชื่อไฟล์ทั้งหมดที่รวมอยู่คุณสามารถ grep สำหรับ# numberบรรทัด:

echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*

บนระบบ Ubuntu 10.04 / gcc 4.4.3 ของฉันสิ่งนี้สร้าง:

$ echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u
"<built-in>"
"<command-line>"
"<stdin>"
"/usr/include/bits/confname.h"
"/usr/include/bits/posix_opt.h"
"/usr/include/bits/predefs.h"
"/usr/include/bits/types.h"
"/usr/include/bits/typesizes.h"
"/usr/include/bits/wordsize.h"
"/usr/include/features.h"
"/usr/include/getopt.h"
"/usr/include/gnu/stubs-64.h"
"/usr/include/gnu/stubs.h"
"/usr/include/sys/cdefs.h"
"/usr/include/unistd.h"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h"

1 หมายเหตุ:พา ธ การค้นหาสำหรับไฟล์รวมถูกแก้ไขโดย-Iตัวเลือกบรรทัดคำสั่ง ดังนั้นคุณควรเพิ่ม-I path อาร์กิวเมนต์ใด ๆในการgccเรียก นอกจากนี้ถ้าคุณกำลังรวบรวม c ++ แหล่งที่คุณควรทดแทนด้วย-x c-x c++

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.