นี่คือคำสั่ง include_server ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
include_server.py - การประมาณแบบอนุรักษ์นิยมของการพึ่งพารวมสำหรับ C/C++
เรื่องย่อ
รวม_เซิร์ฟเวอร์ --ท่า INCLUDE_SERVER_PORT [ตัวเลือก]
DESCRIPTION
include_server.py เริ่มกระบวนการรวมเซิร์ฟเวอร์ กระบวนการนี้ตอบคำถามจาก
discc(1) ลูกค้าเกี่ยวกับไฟล์ที่จะรวมในการคอมไพล์ C/C++ ไฟล์ include_server.py
คำสั่งจะสิ้นสุดลงทันทีที่มีการสร้างเซิร์ฟเวอร์รวม
อาร์กิวเมนต์ INCLUDE_SERVER_PORT คือชื่อของซ็อกเก็ตที่ใช้สำหรับการสื่อสารทั้งหมด
ระหว่างไคลเอ็นต์ distcc และเซิร์ฟเวอร์รวม NS distcc-ปั๊ม(1) คำสั่งรับผิดชอบ
สำหรับสร้างตำแหน่งซ็อกเก็ต เพื่อส่งต่อไปยังสคริปต์นี้ และสำหรับส่งต่อให้ทุกคน
ไคลเอ็นต์ distcc ผ่านตัวแปรสภาพแวดล้อมชื่อ INCLUDE_SERVER_PORT
โปรโตคอลที่ใช้โดยเซิร์ฟเวอร์ include ใช้การนำ RPC ของ distcc ไปใช้ แต่ละ distcc
คำขอประกอบด้วย (1) ไดเร็กทอรีปัจจุบันและ (2) รายการอาร์กิวเมนต์ของ
คำสั่งคอมไพล์
หากเซิร์ฟเวอร์รวมสามารถประมวลผลคำขอได้ เซิร์ฟเวอร์จะตอบกลับไคลเอ็นต์ distcc โดย
ส่งรายการพาธไฟล์ เส้นทางของไฟล์คือแหล่งที่มาและส่วนหัวที่บีบอัด
ไฟล์ที่พบว่าจำเป็นสำหรับการรวบรวมผ่านการวิเคราะห์รวม รายการยัง
ประกอบด้วยลิงก์สัญลักษณ์และแม้แต่ไฟล์จำลองที่จำเป็นสำหรับเซิร์ฟเวอร์การคอมไพล์ถึง
สร้างแบบจำลองที่ถูกต้องของส่วนต่างๆ ของระบบไฟล์ที่จำเป็นสำหรับการคอมไพล์ ใน
ด้วยวิธีนี้ ไฟล์ส่วนหัวที่จำเป็น เช่น /path/foo.h จะถูกบีบอัด เปลี่ยนชื่อ และเก็บไว้ใน a
ตำแหน่งชั่วคราว เช่น /dev/shm/tmpiAvfGv.include_server-9368-1/path/foo.h.lzo NS
ไคลเอ็นต์ distcc จะส่งไฟล์เหล่านี้ไปยังเซิร์ฟเวอร์การคอมไพล์ ซึ่งจะเป็น
ไม่บีบอัดและติดตั้งชั่วคราว
หากเซิร์ฟเวอร์รวมไม่สามารถดำเนินการตามคำขอได้ ก็จะส่งคืนรายการว่าง
ให้กับลูกค้า distcc
มีความล้มเหลวสองประเภทที่เกี่ยวข้องกับเซิร์ฟเวอร์รวม เซิร์ฟเวอร์รวมอาจ
ล้มเหลวในการคำนวณรวมถึงหรือล้มเหลวในลักษณะอื่น ๆ ดูหัวข้อ รวม SERVER อาการ.
นอกจากนี้ การคอมไพล์บนเซิร์ฟเวอร์การลบอาจล้มเหลวเนื่องจากความไม่เพียงพอของการคำนวณ
รวมการปิด แต่แล้วจะสำเร็จเมื่อลองใหม่ในเครื่อง ดูหัวข้อ อปท ความไม่พอใจ
อาการ.
ทางเลือกที่ สรุป
include_server.py เข้าใจตัวเลือกต่อไปนี้
-dPAT, --debug_pattern=PAT
เวกเตอร์บิตสำหรับการเปิดคำเตือนและการดีบัก
1 = คำเตือน
2 = ติดตามฟังก์ชันบางอย่าง
พลังอื่นของสอง: ดู include_server/basics.py
-e, --อีเมล
ส่งอีเมลไปที่ 'distcc-pump-errors' หรือถ้ากำหนดไว้ ค่าของตัวแปรสภาพแวดล้อม
DISTCC_EMAILLOG_WHOM_TO_BLAME เมื่อเซิร์ฟเวอร์รวมมีปัญหา ค่าเริ่มต้นคือ
ที่จะไม่ส่งอีเมล
--email_bound จำนวน
จำนวนอีเมลสูงสุดที่จะส่ง (นอกเหนือจากอีเมลฉบับสุดท้าย) ค่าเริ่มต้น: 3.
--ไม่มีอีเมล
อย่าส่งอีเมล นี่คือค่าเริ่มต้น
--path_observation_re=RE
ออกข้อความเตือนเมื่อใดก็ตามที่ชื่อไฟล์ได้รับการแก้ไขเป็นเส้นทางจริงที่ตรงกัน
โดย RE ซึ่งเป็นนิพจน์ทั่วไปในไวยากรณ์ Python นี้จะเป็นประโยชน์สำหรับการค้นหา
ว่าไฟล์ที่รวมอยู่จริงมาจากไหน ใช้ RE="" เพื่อค้นหาทั้งหมด บันทึก:
คำเตือนต้องเปิดใช้งานอย่างน้อย -d1
--pid_file ไฟล์พาธ
pid ของเซิร์ฟเวอร์ include ถูกเขียนไปยังไฟล์ FILEPATH สิ่งนี้ทำให้สคริปต์
เช่น distcc-ปั๊ม เพื่อรื้อเซิร์ฟเวอร์รวม
-NS, --สถิติ
พิมพ์ข้อมูลไปที่ stdout รวมถึงการวิเคราะห์
--stat_reset_triggers=รายการ
ล้างสถิติแคชเมื่อการประทับเวลาของเส้นทางไฟล์ใด ๆ ใน LIST เปลี่ยนแปลงหรือ
filepath เข้าหรือออกจากการดำรงอยู่ LIST เป็นสตริงที่คั่นด้วยเครื่องหมายโคลอนของ
filepaths อาจมี globs แบบง่าย (ตามที่อนุญาตโดยโมดูล glob ของ Python)
พิมพ์คำเตือนทุกครั้งที่มีการเปลี่ยนแปลงเกิดขึ้น (หากเปิดใช้งานคำเตือน) นี้
ตัวเลือกอนุญาตให้มีข้อยกเว้นที่ จำกัด สำหรับสมมติฐานปกติของ distcc-pump ที่ source
ไฟล์จะไม่ถูกแก้ไขในระหว่างการสร้าง
-NS, --เวลา
พิมพ์เวลาที่ผ่านไป ผู้ใช้ และเวลาของระบบไปที่ stderr
--unsafe_absolute_includes
ทำการประมวลผลล่วงหน้าบนเซิร์ฟเวอร์การคอมไพล์แม้ว่าจะรวมพาธไฟล์แบบสัมบูรณ์ด้วยก็ตาม
จะพบเจอ โดยปกติเซิร์ฟเวอร์รวมจะถอยกลับในการประมวลผลล่วงหน้าในเครื่อง
หากตรวจพบว่ารวมอยู่ด้วยแน่นอน ดังนั้น แฟล็กนี้จึงมีประโยชน์ในการป้องกันเช่น
ทางเลือกอื่นเมื่อรวมค่าสัมบูรณ์เป็นสัญญาณเตือนที่ผิดพลาด อาจเป็นเพราะค่าสัมบูรณ์
รวม ถูกละทิ้งในระหว่างการประมวลผลล่วงหน้าหรือเนื่องจากไฟล์รวมทั้งหมด
มีอยู่บนเซิร์ฟเวอร์การคอมไพล์
แม่นยำยิ่งขึ้นด้วย --unsafe_absolute_includes การรวมแบบสัมบูรณ์จะถูกละเว้นสำหรับ
วัตถุประสงค์ในการรวบรวมการปิดรวม การใช้ตัวเลือกนี้อาจนำไปสู่
ผลลัพธ์ที่ไม่ถูกต้องเพราะ (1) ส่วนหัวอาจรวมอยู่ใน
เซิร์ฟเวอร์การคอมไพล์และอาจไม่เหมือนกับบนไคลเอนต์ (2) รวม
คำสั่งของส่วนหัวจะไม่ได้รับการวิเคราะห์เพิ่มเติม
ตัวเลือกนี้มีประโยชน์สำหรับการคอมไพล์โค้ดที่มีตำแหน่งที่แน่นอนของฮาร์ดโค้ดดังกล่าว
ของไฟล์ส่วนหัวภายในคำสั่งแบบมีเงื่อนไข (เช่น "#ifdef") ที่แสดง
รวมถึงที่ไม่เกี่ยวข้อง แม่นยำยิ่งขึ้น สิ่งเหล่านี้รวมถึงจะต้องถูกกำจัดในระหว่าง
การประมวลผลล่วงหน้าสำหรับการกำหนดค่าจริง แล้วคำถามของการมีอยู่ของ
ไฟล์ส่วนหัวเป็นที่สงสัยและการคอมไพล์ระยะไกลเป็นเสียง ซึ่งมักจะเป็นกรณีนี้ถ้า
รวมถึงมีไว้เพื่อการกำหนดค่าที่ผิดปกติซึ่งแตกต่างจากของจริง
องค์ประกอบ
-ใน, --ตรวจสอบ
ตรวจสอบว่าไฟล์ในการปิด CPP มีการปิดที่คำนวณโดย include
หน่วยประมวลผล
-w, --write_include_closure
เขียนไฟล์ .d_ประมาณ ซึ่งแสดงรายการไฟล์ที่รวมทั้งหมดที่คำนวณโดย include
เซิร์ฟเวอร์; ด้วย -x ให้เขียนไฟล์ที่รวมเพิ่มเติมตามที่ CPP คำนวณถึง a
.d_exact ไฟล์
-NS, --exact_analysis
ใช้ CPP แทน อย่าละเว้นไฟล์ส่วนหัวของระบบ
รวม SERVER อาการ AND ประเด็น
ข้อความและคำเตือนที่มีแนวโน้มว่าจะมาจากตัวประมวลผลรวมอยู่ด้านล่าง
กระบวนการเตรียมการผลิต ในท้องถิ่น เพิ่ม เซิร์ฟเวอร์ ไม่ ครอบคลุม: ไม่สามารถ กำหนด ผิดนัด ระบบ
ประกอบด้วย ไดเรกทอรี
เพื่อกำหนดไดเร็กทอรีส่วนหัวของระบบดีฟอลต์ เซิร์ฟเวอร์ include จะรัน
คอมไพเลอร์หนึ่งครั้งสำหรับแต่ละภาษาที่จำเป็นในระหว่างเซสชัน ข้อความนี้ระบุว่า
ว่าคอมไพเลอร์ที่ระบุให้กับ distcc ไม่มีอยู่บนไคลเอนต์
กระบวนการเตรียมการผลิต ในท้องถิ่น เพิ่ม เซิร์ฟเวอร์ ไม่ ครอบคลุม: การประกันตัว ออก เพราะ ประกอบด้วย เซิร์ฟเวอร์
การใช้จ่าย ข้อมูลเพิ่มเติม กว่า ...NS ผู้ใช้งาน เวลา การจัดการ ขอ
ในสถานการณ์ที่ไม่ปกติ เซิร์ฟเวอร์รวมล้มเหลวในการวิเคราะห์มาโครที่ซับซ้อนมาก
นิพจน์ ไคลเอ็นต์ distcc จะใช้โหมด distcc ธรรมดา
คำเตือน: เส้นทางไฟล์ ต้อง be ญาติ แต่ ไม่ใช่
เซิร์ฟเวอร์รวมไม่ยอมรับเส้นทางไฟล์แบบสัมบูรณ์ เช่น
/usr/include/stdio.h ในคำสั่ง include เพราะไม่มีการรับประกันว่า
ส่วนหัวนี้บนเครื่องเซิร์ฟเวอร์การคอมไพล์จะเหมือนกับส่วนหัวบน
ลูกค้า. เซิร์ฟเวอร์รวมเลิกวิเคราะห์การปิดรวม distcc
ลูกค้าไม่สามารถใช้โหมดปั๊มได้
เพื่อแก้ปัญหานี้ด้วยวิธีที่ไม่น่าเชื่อถือเสมอไป ให้ตั้งค่าตัวแปรสภาพแวดล้อม
INCLUDE_SERVER_ARGS='--unsafe_absolute_includes' เมื่อเรียกใช้ distcc-pump
สคริปต์เพื่อส่งตัวเลือก --unsafe_absolute_includes ไปยังเซิร์ฟเวอร์รวม
คำเตือน: แน่นอน ไฟล์พาธ ... คือ ละเว้น
มีการใช้งาน --unsafe_absolute_includes สถานการณ์นี้เกิดขึ้นภายใต้เดียวกัน
สถานการณ์เช่นเมื่อ "Filepath จะต้องสัมพันธ์กัน แต่ไม่ใช่" ออก แต่ในนี้
กรณีที่ include จะให้คำตอบแก่ลูกค้า distcc
คำเตือน: เส้นทาง '/เส้นทาง/ไฟล์' เปลี่ยน/มา เข้าไป การมีอยู่/ไม่มี อีกต่อไป ที่มีอยู่
คำเตือนเหล่านี้ออกเมื่อใช้ทริกเกอร์การรีเซ็ตสถิติ เนื่องจาก /PATH/FILE
เปลี่ยนแปลง เซิร์ฟเวอร์รวมจะล้างแคช เวอร์ชันใหม่ของไฟล์ (หรือ the
ขาดมัน) ทำให้การวิเคราะห์รวมไม่ถูกต้อง ข้อความนี้มักจะเป็น
ละเลย; มันแสดงถึงการใช้ไฟล์ที่ค่อนข้างล่อแหลมโดยระบบบิลด์
ขอแนะนำให้แก้ไขระบบบิลด์เพื่อไม่ให้ไฟล์ถูกเขียนใหม่
คำเตือน: สำหรับ การแปล หน่วย ... ค้นหา of ไฟล์ ... ได้รับการแก้ไข ไปยัง ... ใคร เส้นทางจริง is
...
คำเตือนนี้เกิดขึ้นกับ --path_observation_re เมื่อเรียลพาธใหม่ที่ตรงกับa
ไฟล์ต้นทางหรือส่วนหัวถูกสังเกต
อปท ความไม่พอใจ อาการ
การโต้ตอบระหว่างระบบบิลด์, distcc และเซิร์ฟเวอร์รวมนั้นค่อนข้าง
ซับซ้อน. เมื่อคำสั่ง distcc ได้รับการคอมไพล์ที่ล้มเหลวจากรีโมตเซิร์ฟเวอร์ it
ลองรวบรวมซ้ำในเครื่อง ส่วนนี้กล่าวถึงสาเหตุของความคลาดเคลื่อน
ระหว่างการคอมไพล์แบบรีโมตและโลคัล สิ่งเหล่านี้ถูกตั้งค่าสถานะโดยข้อความลดระดับ:
__________คำเตือน: ... โหมดปั๊ม การรวบรวม ล้มเหลว on เซิร์ฟเวอร์ แต่ ที่ประสบความสำเร็จ ในท้องถิ่น
__________Distcc-ปั๊ม คือ ลด ไปยัง ธรรมดา โหมด. ดู ความแตกต่าง ความคลาดเคลื่อน อาการ
ส่วน in รวม_เซิร์ฟเวอร์(1) มนุษย์ หน้า.
สคริปต์ distcc-pump จะแสดงข้อความนี้ที่ส่วนท้ายของบิลด์ ซึ่งหมายความว่าสำหรับ at
การเรียกใช้ distcc อย่างน้อยหนึ่งรายการการคอมไพล์ในเครื่องสำเร็จหลังจากการคอมไพล์แบบรีโมต
ล้มเหลว. การเรียก distcc แต่ละครั้งซึ่งเกิดความคลาดเคลื่อนดังกล่าวก็จะออก
ข้อความเช่น:
คำเตือน: รีโมท การรวบรวม of '...' ล้มเหลว, ลองอีกครั้ง ในท้องถิ่น และ ได้ a ต่าง ผล.
การลดระดับทำให้การเรียกใช้ distcc ที่ตามมาใช้โหมด distcc ธรรมดา ดังนั้น
การประมวลผลล่วงหน้าจะเกิดขึ้นบนเครื่องโลคัลสำหรับส่วนที่เหลือของบิลด์ นี้
เทคนิคป้องกันการสร้างช้ามากซึ่งการรวบรวมทั้งหมดสิ้นสุดบนเครื่องท้องถิ่น
หลังจากล้มเหลวจากระยะไกล
แน่นอน ถ้าคอมไพล์โลคัลล้มเหลวหลังจากความล้มเหลวของรีโมต distcc
การเรียกใช้ออกด้วยสถานะที่ไม่ใช่ศูนย์ของการคอมไพล์โลคัล ข้อความแสดงข้อผิดพลาด
พิมพ์ยังเป็นของการรวบรวมในท้องถิ่น
พฤติกรรมทางเลือกสำหรับโหมด distcc-pump เป็นการคอมไพล์โลคัลสามารถปิดใช้งานได้โดยการตั้งค่า
ตัวแปรสภาพแวดล้อม DISTCC_FALLBACK เป็น 1 ซึ่งทำให้คำสั่ง distcc ล้มเหลวทันที
เนื่องจากการรวบรวมจากระยะไกลล้มเหลว การตั้งค่านี้มีประโยชน์มากสำหรับการดีบักว่าทำไม
คอมไพล์ระยะไกลผิดพลาดเพราะตอนนี้เอาต์พุตจากเซิร์ฟเวอร์จะถูกพิมพ์
ต่อไปเราจะพูดถึงสาเหตุที่เป็นไปได้ของความคลาดเคลื่อน
เทศกาล ผู้ใช้งาน การเปลี่ยนแปลง a แหล่ง or ส่วนหัว ไฟล์ ในระหว่าง สร้าง.
สิ่งนี้ให้ผลลัพธ์ที่ไม่สอดคล้องกันแน่นอน
A แหล่ง or ส่วนหัว ไฟล์ การเปลี่ยนแปลง ในระหว่าง สร้าง.
ระบบบิลด์เขียนไฟล์ใหม่ สำหรับลินุกซ์เคอร์เนล 2.6 สิ่งนี้จะเกิดขึ้นสำหรับ
'include/linux/compile.h' และ 'include/asm/asm-offsets.h' เงื่อนไขนี้ได้รับการแก้ไข
โดยให้เซิร์ฟเวอร์รวมรู้ว่าต้องรีเซ็ตแคชเมื่อมีสถานะใด ๆ
ของการเปลี่ยนแปลงไฟล์ ในทางปฏิบัติ ทำได้โดยการรวบรวมไฟล์ในโคลอน-
แยกรายการแล้วตั้งค่าคำสั่ง INCLUDE_SERVER_ARGS ดังนี้:
include_server_args="--stat_reset_triggers=include/linux/compile.h:include/asm/asm-
offsets.h"
A ส่วนหัว ไฟล์ is ที่อาจเกิดขึ้น รวม แต่ ทำ ไม่ มีอยู่, และ is แล้วก็ ต่อมา ที่รวมอยู่
สิ่งนี้เกิดขึ้นเมื่อบางส่วนหัว foo.h รวมไฟล์ส่วนหัวอื่น trick.h แต่
ยังไม่ได้สร้างไฟล์ trick.h และการผนวกรวมจะถูกละเว้น
เนื่องจากคำสั่งก่อนการประมวลผล เซิร์ฟเวอร์รวมจะตรวจสอบสำหรับ
การมีอยู่ของ trick.h เพราะมันเกินแนวทางที่เป็นไปได้ทั้งหมด คำสั่ง
ประเมินจริง. ไฟล์ trick.h ถูกกำหนดให้ไม่มีอยู่จริง ถ้าช้ากว่านั้น
สร้างแล้วรวมเข้าด้วยกันจริง ๆ แล้วเซิร์ฟเวอร์รวมจะเชื่ออย่างผิด ๆ
ว่าไฟล์นั้นยังไม่มีอยู่ วิธีแก้ปัญหานี้คือทำให้
ระบบสร้างสร้าง trick.h ก่อนครั้งแรกที่รวมไฟล์ส่วนหัวใด ๆ
ที่ทำให้การอ้างอิงวากยสัมพันธ์กับ trick.h
เทศกาล ประกอบด้วย เซิร์ฟเวอร์ คือ ข้อความที่เริ่ม กับ --unsafe_absolute_includes.
นี่เป็นปัญหาหากมีไฟล์ส่วนหัวในเครื่องที่ไม่มีอยู่ในระยะไกลและ
ที่ใช้จริง. รวมถึงมักจะได้รับการคุ้มครองตามเงื่อนไข
คำสั่งที่ประเมินเพื่อนำไปใช้จริงเฉพาะเจาะจงและบ่อยครั้งเท่านั้น
แพลตฟอร์มที่ไม่ธรรมดา หากคุณไม่ได้รวบรวมสำหรับแพลตฟอร์มดังกล่าว มันอาจจะ
ถูกต้องในการใช้งาน --unsafe_absolute_include.
เทศกาล ประกอบด้วย เซิร์ฟเวอร์ มี คำนวณ ผิด รวมถึง
เราไม่ทราบสถานการณ์ดังกล่าว
EXIT รหัส
รหัสออกของ include_server.py มักจะเป็น 0 ซึ่งเซิร์ฟเวอร์ include ได้เริ่มทำงานแล้ว
มีการสื่อสารอย่างถูกต้องผ่านการมีอยู่ของ pid_file
และพวกเรา ตัวแปร
DISTCC_EMAILLOG_WHOM_TO_BLAME ที่อยู่อีเมลที่จะใช้สำหรับรวมเซิร์ฟเวอร์อัตโนมัติ
อีเมล ค่าเริ่มต้นคือ 'distcc-pump-errors' (ซึ่งเป็นที่อยู่อีเมลที่น่าจะ
ไม่มีอยู่ในโดเมนของคุณ)
นอกจากนี้ การเรียกใช้คอมไพเลอร์อาจใช้ตัวแปรสภาพแวดล้อมเพิ่มเติม
ใช้ include_server ออนไลน์โดยใช้บริการ onworks.net