3 คะแนน โดย GN⁺ 2023-07-15 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิศวกรซอฟต์แวร์คนหนึ่งได้เขียนแพตช์สำหรับ GCC เพื่อทำให้การสร้างไฟล์ปฏิบัติการที่พกพาได้จริงด้วย Cosmopolitan Libc ง่ายขึ้น
  • แพตช์นี้ทำให้สามารถคอมไพล์ซอฟต์แวร์ยอดนิยมอย่าง bash, curl, git และแม้แต่ gcc เองด้วย Cosmopolitan Libc ได้โดยไม่ต้องแก้ซอร์สโค้ด
  • ไฟล์ปฏิบัติการที่สร้างขึ้นสามารถรันได้บน Linux, FreeBSD, MacOS, OpenBSD, NetBSD และในบางกรณีกับ Windows
  • บทความนี้ให้คำแนะนำแบบทีละขั้นตอนเกี่ยวกับวิธีพอร์ตซอฟต์แวร์ของตนเองไปยัง Cosmopolitan Libc
  • แพตช์นี้แก้ปัญหาใน switch statement และการกำหนดค่าเริ่มต้นให้โครงสร้างข้อมูลที่พึ่งพาค่าของระบบ
  • ผู้เขียนในตอนแรกพยายามทำให้การแปลงเป็นอัตโนมัติด้วยสคริปต์ sed และ Python เพราะ C preprocessor และ ifdef แต่ก็ไม่สามารถทำงานได้ครบถ้วน
  • จากนั้นผู้เขียนได้สำรวจการใช้ปลั๊กอิน GCC และการแพตช์ GCC เองเพื่อแก้ปัญหา
  • เมื่อใช้ GCC ที่ถูกแพตช์แล้ว ก็สามารถคอมไพล์ซอฟต์แวร์ด้วย Cosmopolitan Libc ได้ ทำให้กระบวนการพอร์ตทำได้ง่ายและลื่นไหลขึ้น
  • ผู้เขียนสามารถคอมไพล์ lua ได้สำเร็จ และได้ปรับเปลี่ยน python3.11 เพื่อเข้าถึงที่เก็บ ZIP
  • ระหว่างการคอมไพล์ busybox ซึ่งใช้อาร์เรย์สตริงเป็นตาราง lookup ผู้เขียนพบความยากลำบาก
  • ยังมีความท้าทายเกี่ยวกับการกำหนดค่าเริ่มต้นให้โครงสร้างข้อมูลใน ncurses เนื่องจาก binary expression
  • ผู้เขียนสรุปว่าในกรณีส่วนใหญ่ การเปลี่ยนแปลงที่จำเป็นสำหรับการพอร์ตซอฟต์แวร์ไปยัง Cosmopolitan Libc มีน้อยมาก
  • ผู้เขียนยอมรับว่าแพตช์นี้อาจยังไม่สมบูรณ์แบบและอาจมีข้อจำกัดบางประการ
  • ผู้เขียนสนับสนุนให้ผู้อ่านลองคอมไพล์ซอฟต์แวร์ C ด้วย Cosmopolitan Libc
  • ผู้เขียนกล่าวถึงความเป็นไปได้ที่ไฟล์ปฏิบัติการจะสามารถรันบน Windows ได้ แต่ยังไม่ได้ทดสอบ
  • ผู้เขียนให้ข้อมูลและเอกสารอ้างอิงเพิ่มเติม

3 ความคิดเห็น

 
ryuheechul 2023-07-15

ตอนนี้ neo จะใช้รูปแบบที่ครอบข้อความด้วยโค้ดบล็อกจริง ๆ แล้วเหรอ? ที่ต้องเลื่อนแนวนอนค่อนข้างน่าเสียดาย แล้วก็สีข้อความโทนแดงก็แอบน่าเสียดายนิดหน่อย...

 
xguru 2023-07-16

อ๊ะ การถูกครอบด้วยโค้ดบล็อกเป็นบั๊กครับ ฮือ

 
GN⁺ 2023-07-15
ความคิดเห็นจาก Hacker News
  • ผู้เขียนได้เขียนโพสต์เกี่ยวกับวิธีแพตช์ GCC เพื่อสร้างไฟล์ปฏิบัติการที่พกพาข้ามระบบได้จริง
  • แพตช์นี้ทำให้สามารถบิลด์ซอฟต์แวร์อย่าง vim, emacs, ninja, bash, git และ gcc ด้วย Cosmopolitan Libc ได้
  • ไฟล์ปฏิบัติการที่บิลด์แล้วควรสามารถรันได้บน Linux, FreeBSD, MacOS, OpenBSD, NetBSD และ Windows
  • ผู้เขียนให้รายชื่อซอฟต์แวร์ที่สามารถบิลด์ได้โดยใช้เทคนิคนี้
  • มีทิคเก็ตในรีโพซิทอรีของ Go เกี่ยวกับหัวข้อนี้
  • ผู้แสดงความคิดเห็นคนหนึ่งเสนอแนวทางอีกแบบสำหรับการบิลด์เป้าหมาย OS ใหม่
  • ผู้แสดงความคิดเห็นอีกคนเสนอให้เผยแพร่รายชื่อซอฟต์แวร์ที่คอมไพล์สำเร็จโดยใช้เทคนิคนี้
  • มีคนตั้งคำถามถึงจุดประสงค์เชิงปฏิบัติของไฟล์ปฏิบัติการที่พกพาได้จริง
  • ผู้แสดงความคิดเห็นอีกคนเสนอแนวทางอีกแบบในการจัดการค่าคงที่ในโค้ด
  • มีการอภิปรายเกี่ยวกับการใช้หมายเลขสัญญาณและ errno
  • มีคนตั้งคำถามถึงไลบรารีมาตรฐาน C++ และการใช้ std::error_code ของมัน
  • ผู้แสดงความคิดเห็นคนหนึ่งมองว่าหัวข้อนี้น่าทึ่งมาก
  • มีการอภิปรายเกี่ยวกับ EINVAL ซึ่งเป็นค่าคงที่ตอนคอมไพล์