Gcc के साथ लिंक नहीं होगा -32


23

64-बिट सिस्टम पर भी सबसे सरल ( int main(){}) प्रोग्राम को संकलित करने की कोशिश -m32विफल रहती है:

$ 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भी आवश्यक होगा।
व्लादिमीर पेंटेलेव

1
यह भी विचार करें: libc6-dev-i386
केनोरब

0

X86_64 वातावरण में x कोड 32 बिट निष्पादन योग्य के लिए सफलतापूर्वक C कोड संकलित करने के लिए आपको निम्नलिखित अतिरिक्त पैकेज स्थापित करने होंगे:

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

जैसे कंपाइल कॉल के बाद

$ gcc -m32 test.c -o test

सफल होता है।


0

यह समस्या तब भी होती है जब gccसंस्करण के संस्करण के साथ मेल नहीं खाता है gcc-multilib। इस मामले में आपको मल्टीबिल पैकेज के सही संस्करण को स्थापित करना चाहिए। उदाहरण के लिए; मैं gcc संस्करण का उपयोग कर रहा था 4.6इसलिए मुझे स्थापित करना था gcc-4.6-multilibऔर g++-4.6-multilibक्योंकि डिफ़ॉल्ट gcc-multilibपैकेज था 4.8

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.