gcc จะไม่เชื่อมโยงกับ -m32


23

การพยายามคอมไพล์แม้แต่โปรแกรมที่ง่ายที่สุด ( int main(){}) ที่มี-m32ในระบบ 64 บิตล้มเหลว:

$ gcc -m32 test.c
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

ดูเหมือนว่าจะยังคงค้นหาผิดในไดเรกทอรีที่ไม่ถูกต้องเมื่อ-m32มีการระบุ

libgcc-4.8-dev:i386มีการติดตั้งและฉันได้รับการตรวจสอบว่าห้องสมุด 32 /usr/lib/gcc/i686-linux-gnu/4.8/บิตจะอยู่ใน

ฉันได้ลองตั้งค่าและส่งออกLD_INCLUDE_PATHและLD_LIBRARY_PATHไม่เป็นประโยชน์


คำตอบ:


23

ก่อนอื่นคุณต้องติดตั้ง "gcc-multilib" และ "g ++ - multilib"

sudo apt-get install gcc-multilib g++-multilib

จากนั้นคำสั่งปัจจุบันของคุณจะทำงาน

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped

2
หมายเหตุ: สำหรับโปรแกรม C ++ g++-multilibจะต้องมีเช่นกัน
Vladimir Panteleev

1
พิจารณาด้วย: libc6-dev-i386.
kenorb

0

สำหรับการคอมไพล์รหัส C เป็น x86 32 บิตสำเร็จในสภาพแวดล้อม x86_64 คุณต้องติดตั้งแพ็กเกจพิเศษต่อไปนี้:

sudo apt-get install libc6-dev-i386 gcc-multilib

หลังจากรวบรวมสายเช่น

$ gcc -m32 test.c -o test

ประสบความสำเร็จ


0

ปัญหานี้เกิดขึ้นเมื่อรุ่นไม่ตรงกับรุ่นของgcc gcc-multilibในกรณีนี้คุณควรติดตั้งแพ็คเกจ multilib รุ่นที่ถูกต้อง ตัวอย่างเช่น; ผมใช้รุ่น gcc 4.6เพื่อให้ฉันได้ติดตั้งgcc-4.6-multilibและg++-4.6-multilibเพราะเริ่มต้นแพคเกจสำหรับgcc-multilib4.8

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