เรียกใช้แอป 64 บิตบนระบบ Ubuntu 32 บิต


10

คำถามทั้งหมดที่ฉันเห็นอ้างถึงการเรียกใช้แอพ 32 บิตในระบบ 64 บิต

ฉันใช้ Ubuntu 12.04 แบบ 32 บิต (จริง ๆ แล้วเป็นระบบปฏิบัติการระดับประถมศึกษาของลูน่าซึ่งขึ้นอยู่กับมัน) และฉันพยายามเรียกใช้แอพ 64 บิตที่ไม่ยอมเปิด วิ่ง:

./64bit_app.run

( 64bit_app.runแอป 64 บิตที่ฉันพยายามเรียกใช้) อยู่ที่ไหนให้ผลลัพธ์:

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

ซึ่งแปลว่า " ไม่สามารถเรียกใช้ / เรียกใช้ / เปิดไฟล์ไบนารี "

ฉันควรจะสามารถใช้มันได้หรือไม่? เป็นไปได้หรือไม่ที่จะเรียกใช้แอพ 64 บิตในระบบ 32- บิต? ถ้าเป็นเช่นนั้นได้อย่างไร


ฉันยังไม่ได้ลอง แต่คุณได้ลองวิธีแก้ปัญหาที่แสดงที่นี่โดยเฉพาะคำตอบที่อธิบายdpkg --add-architectureหรือไม่ เท่าที่ผมรู้ว่าวิธีการเดียวกันควรจะทำงานสำหรับ 32 64 และ 64 ใน 32 เพียงแค่เปลี่ยนไปdpkg --add-architecture i386 dpkg --add-architecture amd64
terdon

1
คุณทำมีฮาร์ดแวร์ 64 บิตใช่มั้ย? (เพื่อให้แน่ใจ)
strugee

"ไม่ยอมเปิด" ว่าอย่างไร
Braiam

1
โปรดอ่านคำตอบสำหรับคำถามที่ฉันเชื่อมโยงคุณต้องเรียกใช้sudo dpkg --add-architecture amd64ก่อน นั่นเป็นคำสั่งแยกต่างหาก
terdon

1
@terdon ขออภัยฉันไม่เข้าใจว่า เล่นว่าผลประกอบการใน: dpkg: error: opción --add-architecture desconocidaที่แปลว่าdesconocida unknown
Gabriel

คำตอบ:


8

คุณไม่สามารถทำเช่นนั้นโดยตรงบน Linux บน x86_64 ด้วยเคอร์เนล 32 บิต คุณต้องมีเคอร์เนล 64 บิตเพื่อให้สามารถเรียกใช้รหัส 64 บิตได้ (หมายเหตุ: เคอร์เนลคุณสามารถมี 32 บิต userland ทำงานบนเคอร์เนล 64 บิตและติดตั้งการสนับสนุนสำหรับ 64 บิตไบนารีวิธีนี้ง่ายขึ้นอยู่กับการกระจายตัวอย่างที่นี่สำหรับ Debian)

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

เนื่องจากการแจกแจง 64 บิตส่วนใหญ่นั้นมีการสนับสนุน 32 บิต (โดยค่าเริ่มต้นหรือติดตั้งได้) นั่นคือสิ่งที่คุณควรใช้หากคุณต้องการใช้งานทั้ง 64 บิตและ 32 บิตในระบบปฏิบัติการเดียวกัน


7

การขยายคำตอบของ @ Mat:

ใช่ซอฟต์แวร์การจำลองเสมือนบางตัวสามารถทำได้ อุปสรรคหลักในการจัดการคือในสภาพแวดล้อมแบบ 32 บิตคุณลักษณะ 64 บิตของ CPU ไม่พร้อมใช้งานและคุณสมบัติของเคอร์เนล 64 บิตไม่พร้อมใช้งาน มันก็ยิ่งดังนั้นถ้า CPU ของคุณมีการสนับสนุน 64 บิต (ตั้งแต่รอบปี 2003 ทั้งหมดของพวกเขามี)

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

qemu-x86_64 ./your_64bit_app

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

สามารถเลียนแบบแอพ linux x86-64 เท่านั้น


บางแห่งที่ฉันเคยอ่านด้วยเช่นกันว่า vmware สามารถทำเช่นนั้นได้ แต่นี่ไม่เพียงพอสำหรับข้อมูลคำตอบ Afaik vmware ล่าสุดเป็น 64 บิตเท่านั้นที่ฝั่งโฮสต์
peterh - Reinstate Monica

1

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

เคอร์เนลแบบ 32 บิตที่รับรู้ 64 บิตที่ออกแบบมาอย่างพิถีพิถันสามารถเรียกใช้แอพ 64 บิตได้แต่มันยังต้องการรหัส 64 บิตที่จะประหยัดบริบทซึ่งทำให้มันไม่ใช่เคอร์เนล 32 บิตที่บริสุทธิ์อีกต่อไป

คุณสามารถเรียกใช้ระบบปฏิบัติการ 64 บิตภายในตัวจำลองหรือเครื่องเสมือนแขก 64 บิตภายในโฮสต์ 32 บิตพร้อม VT-x แต่ในทางเทคนิคแล้วคุณใช้ระบบ 64 บิตอื่น ยังไม่สามารถเรียกใช้รหัส 64 บิตโดยตรงบนเคอร์เนล Linux แบบ 32 บิต

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