linux เป็นเลขฐานสองสากลสำหรับการแจกแจงทุกชนิดหรือไม่


15

ฉันติดตั้ง model sim VHDL simulator บน Linux คู่มือบอกว่ารองรับ RedHat หรือ Suse เท่านั้น แต่ฉันพยายามติดตั้งบน Ubuntu และฉันสามารถติดตั้งได้โดยไม่มีปัญหา

ป้อนคำอธิบายรูปภาพที่นี่

  • ลินุกซ์เป็นไบนารีสากลสำหรับการกระจายทุกชนิดหรือไม่? ฉันหมายความว่าถ้าฉันทำโปรแกรมเกี่ยวกับการ distrubution A ฉันจะแน่ใจได้หรือไม่ว่ามันจะทำงานบน linux ใด ๆ
  • เหตุใดผู้ขายโปรแกรมเชิงพาณิชย์ส่วนใหญ่จึงกล่าวว่าโปรแกรมทำงานบนการแจกจ่ายเฉพาะ (ส่วนใหญ่ Redhat และ Suse ไม่ใช่ Ubuntu)

คำตอบ:


15

นี่คือสองคำถาม:

ลินุกซ์ไบนารีสากลสำหรับทุกการแจกแจงหรือไม่?

มันขึ้นอยู่กับ:

  • หากโปรแกรมไม่ได้ใช้อะไรเลยนอกเคอร์เนลลินุกซ์มันจะเป็นสากลยกเว้นคำถาม 32- หรือ 64- บิต Linux "hello world" (โปรแกรมเรียบง่ายที่พิมพ์ "hello world" ไปยังหน้าต่างเทอร์มินัล) อาจเป็นอิสระจากการแจกจ่าย
  • หากโปรแกรมกำลังใช้งานไลบรารีหรือบริการที่ไม่ใช่เคอร์เนล (ซึ่งเป็น Linux ส่วนใหญ่เคอร์เนลมีขนาดค่อนข้างเล็ก) จะมีความแตกต่างในการรวมไลบรารี่ซึ่งเวอร์ชันไลบรารี่เหล่านี้อยู่ที่ไหนและอยู่ที่ไหน ดังนั้นในการแจกแจงกรณี (ทั่วไป) นี้ไม่เท่ากัน

เหตุใดโปรแกรมเชิงพาณิชย์หลายโปรแกรมจึงกล่าวว่าพวกเขาทำงานได้เพียงหนึ่งหรือสองสามดิสทริบิวชัน?

เนื่องจากมีลีนุกซ์จำนวนมากและไม่มีใครต้องการทดสอบโปรแกรมของพวกเขากับพวกเขาทั้งหมด

โดยปกติผู้จำหน่ายเชิงพาณิชย์จะกล่าวว่าพวกเขาสนับสนุนเฉพาะการแจกจ่ายที่พวกเขาทดสอบซอฟต์แวร์ อาจหรืออาจไม่ทำงานในการกระจายอื่น ๆ จากมุมมองของผู้ขายจุดเป็นเพียงที่คุณไม่สามารถบ่นถ้ามันไม่ทำงานในการกระจายพวกเขาไม่สนับสนุน

การกระจายใดที่เลือกสำหรับการทดสอบขึ้นอยู่กับสิ่งที่ผู้ขายคาดหวังให้ลูกค้าใช้ โดยทั่วไปแล้วโปรแกรมเชิงพาณิชย์ / มืออาชีพมักเลือกการกระจายขององค์กรซึ่งอาจคล้ายกับ "ผู้ที่จ่ายเงินให้กับระบบปฏิบัติการของพวกเขานั้นมีแนวโน้มที่จะจ่ายค่าซอฟต์แวร์ของเรา" อาจเป็นเพียงการนับการแจกแจงที่ลูกค้าเก่าใช้

ดูเพิ่มเติม Mark Shuttleworth (คนที่เป็นเหตุผลที่เรามีอูบุนตูในตอนแรก) เกี่ยวกับความเข้ากันได้ของไบนารีระหว่าง Ubuntu และ Debian - Debian คือการกระจายที่ใกล้เคียงที่สุดของ Ubuntu


2

ทั้ง RedHat และ SUSE นั้นมีประเพณี Linux ในองค์กรที่ยาวนาน เมื่อเวลาผ่านไปจะมีตัวอย่างเพิ่มเติมของแพ็คเกจที่ผ่านการทดสอบการใช้งานบน Ubuntu ในความเป็นจริงแพคเกจดังกล่าวจำนวนมากตั้งแต่ปีที่แล้วมาทดสอบว่าทำงานกับ Ubuntu เนื่องจาก Canonical ทำข้อตกลงกับผู้ขายจำนวนมากจะมีแพ็คเกจที่ได้รับการรับรองจาก Ubuntu มากกว่า

สำหรับคำถามแรกของคุณ: หากคุณต้องการสร้างโปรแกรมที่ทำงานในทุกดิสทริบิวชันให้สร้างไฟล์ปฏิบัติการแบบสแตติก (เทียบกับไดนามิก) statically-linkedปฏิบัติการไม่ขึ้นอยู่กับระบบห้องสมุดจึงสามารถทำงานระหว่างการกระจายตราบเท่าที่สถาปัตยกรรม (เช่น Intel / AMD) เป็นเดียวกัน

นี่คือโปรแกรม

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

ลองรวบรวมตามปกติ

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

ดังนั้นคุณสามารถทำอะไรกับโปรแกรม VHDL นั้น ได้รับไฟล์ .rpm และแปลงเป็น .deb ใช้คนต่างด้าว จากนั้นติดตั้ง ถ้ามันใช้ได้คุณก็โอเค หากไม่ได้ผลให้ใช้lddเพื่อพิจารณาว่าไฟล์ไลบรารีใดหายไป ในสถานการณ์กรณีที่เลวร้ายที่สุดให้สร้างเครื่องเสมือนสำหรับลีนุกซ์รุ่นอื่นและรันโปรแกรมที่นั่น


1

ฉันตอบ jg-faustus เป็นครั้งที่สอง แต่คุณต้องระมัดระวังเกี่ยวกับรูปแบบแพ็คเกจ แม้ว่า executables นั้นจะพกพาได้และมีไลบรารีที่จำเป็นทั้งหมดอยู่ distros ที่แตกต่างกันจะวางไฟล์ในที่ต่าง ๆ และใช้เครื่องมือต่าง ๆ ในการจัดการแพ็คเกจที่ติดตั้งหากผู้จำหน่ายบรรจุผลิตภัณฑ์เป็นแพ็คเกจ RPM คุณจะต้องใช้แพ็คเกจเช่น ' เอเลี่ยน 'ในการแปลงและติดตั้งภายใต้การแจกแจงแบบ DEB เช่น Ubuntu

หากพวกเขาแจกจ่ายซอฟต์แวร์ของพวกเขาเป็นซอร์สโค้ดคุณก็อาจจะสามารถรวบรวมได้ด้วยตัวเอง ณ จุดนี้ไฟล์ปฏิบัติการนั้นจะได้รับการปรับให้เหมาะสมกับระบบเฉพาะของคุณ (แต่ตัวจัดการแพกเกจ Ubuntu ไม่ทราบ)

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