gcc -m32 এর সাথে লিঙ্ক করবে না


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কোনও লাভ হয়নি।


সম্পর্কিত:
কীভাবে cc৪-

উত্তর:


23

প্রথমত, আপনাকে "জিসিসি-মাল্টিলেব" এবং "জি ++ - মাল্টিলেব" ইনস্টল করতে হবে

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
দ্রষ্টব্য: সি ++ প্রোগ্রামগুলির g++-multilibজন্যও প্রয়োজনীয় হবে।
ভ্লাদিমির পানতেলিভ

1
এছাড়াও বিবেচনা করুন: libc6-dev-i386
কেনারব

0

একটি x86_64 পরিবেশে সফলভাবে সি কোডটি x86 32 বিট এক্সিকিউটেবলে সংকলনের জন্য আপনাকে নিম্নলিখিত অতিরিক্ত প্যাকেজ ইনস্টল করতে হবে:

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

একটি সংকলন কল পরে

$ gcc -m32 test.c -o test

সফল।


0

gccসংস্করণটির সংস্করণটির সাথে মেলে না, তখন এই সমস্যাটিও ঘটে gcc-multilib। এই ক্ষেত্রে আপনার মাল্টিলেব প্যাকেজগুলির সঠিক সংস্করণ ইনস্টল করা উচিত। উদাহরণ স্বরূপ; আমি জিসিসি সংস্করণ ব্যবহার করছিলাম 4.6তাই আমাকে ইনস্টল করতে হয়েছিল gcc-4.6-multilibএবং g++-4.6-multilibকারণ ডিফল্ট gcc-multilibপ্যাকেজটি ছিল 4.8

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.