নাচোস উত্স কোডটি সংকলনের সময় ত্রুটি "gnu / stubs-32.h: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"


170

আমি আমার ল্যাপটপে নাচোস ইনস্টল করার চেষ্টা করছি এবং আমার ল্যাপটপে উবুন্টু 11.04 রয়েছে।

কোডটি সি-তে রয়েছে এবং তাই এটি তৈরি করতে আমি ধরে নিয়েছি আমার ক্রস সংকলক লাগবে। আমার সমস্যাটি এখানেই। আমি কমান্ডটি ব্যবহার করে এমআইপিএস ক্রস সংকলকটির উত্স কোডটি ডাউনলোড করেছি

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

এবং আমি এটি ব্যবহার করে আনজিপ করেছিলাম

tar zxvf mips-decstation.linux-xgcc.gz      

এটি ঠিক আছে, তবে যখন আমি মেক ব্যবহার করে নাচোস ওএসের উত্স কোডটি তৈরি করার চেষ্টা করি তখন আমি এই ত্রুটিটি পেয়ে যাই -

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1

আমি এখানে প্রদত্ত নির্দেশাবলী অনুসরণ করার চেষ্টা করছি - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm এবং আমি যখন মেক ব্যবহারের চেষ্টা করি তখন ব্যতীত সবকিছু ঠিকঠাক হয়।


1
আপনার পরামর্শের জন্য আপনাকে ধন্যবাদ, প্রোগ্রামটি এখন সংকলন করতে শুরু করেছে তবে আমি এই ত্রুটিটি পেয়েছি _ হাই, এখন আমার এই ত্রুটিটি রয়েছে - / usr / bin / ld: বেমানান / ইউএসআর / লিব / x86_64-লিনাক্স-জিএনএন / জিসিসি / x86_64- linux-gnu / 4.5.2 / libstdc ++। a -lstdc ++ / usr / bin / ld অনুসন্ধান করার সময়: -lstdc ++ সংগ্রহ 2 খুঁজে পাওয়া যায় না: এলডি 1 প্রস্থান স্থিতি ফিরে আসে: *** [নচোস] ত্রুটি 1 ঠিক করার পদ্ধতি সম্পর্কে কোনও ধারণা এই ? আমি এই সম্পর্কে কি করা উচিত?
আশীষ আগরওয়াল

উত্তর:


352

আপনি 32 বিট libc ডেভ প্যাকেজটি মিস করছেন:

উপর উবুন্টু এটা libc6-দেব-মধ্যে i386 বলা হচ্ছে - না sudo apt-get install libc6-dev-i386। উবুন্টু 12.04 এর জন্য অতিরিক্ত নির্দেশাবলীর জন্য নীচে দেখুন।

উপর রেড হ্যাট ডিস্ট্রো, প্যাকেজ নাম glibc-devel.i686(ডেভিড গার্ডনারের মন্তব্য ধন্যবাদ)।

উপর সেন্টওএস 5.8 , প্যাকেজ নাম glibc-devel.i386(JimKleck এর মন্তব্যের ধন্যবাদ)।

উপর সেন্টওএস 6/7 , প্যাকেজ নাম glibc-devel.i686

উপর SLES এটা জন্য glibc-devel-32bit বলা হচ্ছে - না zypper in glibc-devel-32bit

উপর জেন্টু এটা বলা হচ্ছে sys-libs/glibc- না emerge -1a sys-libs/gcc [ উৎস ] (দ্রষ্টব্য: ওয়ান ব্যবহার করতে পারেন equeryএই সঠিক তা নিশ্চিত করতে; না equery belongs belongs /usr/include/gnu/stubs-32.h)

উপর ArchLinux , প্যাকেজ নাম lib32-glibc- কি pacman -S lib32-glibc


আপনি কি উবুন্টু 12.04 ব্যবহার করছেন ? নেই একটি পরিচিত সমস্যা হল একটি অ মান অবস্থান রাখে ফাইল । আপনারও এটি করতে হবে:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

আপনি নির্মাণের আগে কোথাও (আপনার .bashrc তে বলুন)।


আপনি যদি সি ++ কোডও সংকলন করে থাকেন তবে আপনার জন্য 32 বিট stdc ++ লাইব্রেরিও লাগবে। আপনি যদি এই সতর্কতাটি দেখেন:

.... / usr / bin / ld: -lstdc ++ সন্ধান করতে পারে না ...

উপর উবুন্টু আপনাকে যা করতে হবে sudo apt-get install g++-multilib

উপর সেন্টওএস 5 আপনাকে যা করতে হবে হবেyum install libstdc++-devel.i386

উপর সেন্টওএস 6 আপনাকে যা করতে হবে হবেyum install libstdc++-devel.i686

অন্যান্য সিস্টেমের জন্য প্যাকেজগুলিতে বিনা দ্বিধায় দয়া করে বোধ করুন


2
আমি যে প্যাকেজটি খুঁজে পাইনি তার কারণ হ'ল আমার ল্যাপটপটি 32 বিট ... তবে আমি এটি খুঁজে পেয়েছি libc-dev-amd64। আমার খারাপ।
কিথ লেইন

1
হ্যাঁ, আমি বলব তিনি সম্ভবত একটি bit৪ বিট মেশিনে রয়েছেন, যার কারণে ফাইলটি অনুপস্থিত। আমার bit৪ বিট মেশিনে, স্টুবস (যা তার রয়েছে) libc6-dev-এ রয়েছে, যখন স্টাবস -32.h (যা তিনি করেন না) libc6-dev-i386-এ রয়েছে। অ্যাপটি-ফাইল সম্পর্কে ভাল পরামর্শ - আমি এটি সম্পর্কে জানতাম না :)
টিমোথি জোনস

8
আপনি এই লাইব্রেরির 32 বিট সংস্করণটি একটিsudo apt-get install g++-multilib
টিমোথি জোনস

1
যারা রেড হ্যাট-ভিত্তিক ডিস্ট্রোজে এটির মুখোমুখি হন, তাদের জন্য প্যাকেজটি গ্লিবসি-ডেভেল.আই 6868 ((আমি সবেমাত্র করেছি এবং এই উত্তরটি আমাকে সঠিক দিকে নির্দেশ করার জন্য সহায়ক ছিল :)
ডেভিড গার্ডনার

2
উবুন্টু 12.04 এ একটি ज्ञিত সমস্যা রয়েছে যা এই ফাইলটি ইনস্টলেশন পরে একটি অ-মানক ডিরেক্টরিতে রাখে। এই সমাধানটি আমার জন্য শেষ দিকে কাজ করেছিল gcc.gnu.org/ML/gcc/2012-02/msg00314.html
এরিক চেন

55

থেকে গনুহ ইউপিসি ওয়েবসাইট :

সংকলক বিল্ড মারাত্মক ত্রুটির সাথে ব্যর্থ: gnu / stubs-32.h: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

এই ত্রুটি বার্তাটি bit৪ বিট সিস্টেমে প্রদর্শিত হবে যেখানে জিসিসি / ইউপিসি মাল্টিলিব বৈশিষ্ট্যটি সক্ষম করা আছে এবং এটি ইঙ্গিত দেয় যে 32 বিট সংস্করণটি লিবিসি ইনস্টল করা নেই। এই সমস্যাটি সংশোধন করার দুটি উপায় রয়েছে:

  • Glibc এর 32 বিট সংস্করণ ইনস্টল করুন (উদাহরণস্বরূপ Fedora, CentOS, .. এ glibc-devel.i686 ..)
  • সংকলক কনফিগারেশন কমান্ডের "--disable-multilib" স্যুইচ সরবরাহ করে 'মাল্টিলিব' বিল্ড অক্ষম করুন

8
একটি বিশেষ দরকারী উত্তরের জন্য আপনাকে ধন্যবাদ: --disable-multilibঅংশ
necromancer

3
@ djhaskin987, gccupc.org উত্স নয়, gcc.gnu.org হ'ল
জোনাথন ওয়াকলি

আমি x64 সেন্টোস 6.4-এ 'ইয়াম ইনস্টল গ্লিবিসি-ডেভেল.আই 686' করেছি
plhn

1
অটোকনফ ভিত্তিক মেক সিস্টেমের সাহায্যে আপনি এটি কীভাবে করবেন? আমি - অক্ষম-মাল্টিলেব পাস করার চেষ্টা করেছি, তবে এটি কোনও পরিবর্তন করে না। মাল্টিলেব প্যাকেজ ইনস্টল করার জন্য আমার কাছে রুট অ্যাক্সেস নেই।
ব্যবহারকারী 632657

9

একটি করার চেষ্টা করুন sudo apt-get install libc6-dev

apt-file আমাকে বলে যে প্রশ্নে থাকা ফাইলটি সেই প্যাকেজের অন্তর্ভুক্ত।


আপনার উত্তরের জন্য ধন্যবাদ, এটি অনেক সাহায্য করেছে: ডি
আশীষ আগরওয়াল

এটি মাল্টিআরচ মেশিনে যথেষ্ট নয় কারণ আপনি এখনও libc6-dev ইনস্টল করা থাকলেও আপনি এই ত্রুটিটি পাবেন।
জেরেমিয়া


2

ফেডোরা 18 বাক্সে আমি নিম্নলিখিত ত্রুটি পেয়েছি:


1. /usr/incolve/gnu/stubs.h:7:27: মারাত্মক ত্রুটি: gnu / stubs-32.h: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি সংকলন সমাপ্ত হয়নি।

আমি glibc.i686 এবং glibc-devel.i686 ইনস্টল করেছি, তারপরে নিম্নলিখিত ত্রুটির সাথে সংকলন ব্যর্থ হয়েছে:

২ / / usr / বিন / এলডি: বেমানান /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so -lgcc_s / usr / bin / ld অনুসন্ধানের সময় খুঁজে পাওয়া যায় না: -lgcc_s সংগ্রহ 2: ত্রুটি : ld 1 প্রস্থান স্থিতি ফিরে এসেছে

সমাধান:

সংকলনের সমস্যা থেকে মুক্তি পেতে আমি (yum ইনস্টল) glibc.i686 glibc-devel.i386 এবং libgcc.i686 ইনস্টল করেছি।

এখন 32 বিটের জন্য সংকলন (-m32) ভাল কাজ করে।


1

হুম ভাল আমি উবুন্টু 12.04 এ আছি এবং জিসিসি 4.7.2 সংকলনের চেষ্টা করার সময় আমি এই একই ত্রুটি পেয়েছি

আমি libc6-dev-i386প্যাকেজটি ইনস্টল করার চেষ্টা করেছি এবং নিম্নলিখিতগুলি পেয়েছি:

Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libc6-dev-i386' has no installation candidate

আমি বাশে সঠিক পরিবেশের ভেরিয়েবলগুলি সেট করেছি:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

তবে, আমি এখনও ত্রুটিটি পেয়ে যাচ্ছিলাম তখন আমি কেবল অনুলিপি করেছিলাম stubs-32.hযেখানে জিসিসি দ্রুত পার্থক্য করার পরে এটি খুঁজে পাওয়ার আশা করেছিল:

vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic: 
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$

এটি এখন সংকলন করছে, দেখা যাক এটি আরও অভিযোগ করে কিনা ...


অস্বাভাবিক. যে প্যাকেজ 12.04 (সঠিক) স্পষ্টভাবে উপলব্ধ দেখতে হয় packages.ubuntu.com/precise/libc6-dev-i386
টিমোথি জোনস

0

এফডাব্লুআইডাব্লু, ক্রস-সংকলন করার সময় / ইউএসআর / থেকে ফাইলগুলি ব্যবহার করার জন্য এটি ত্রুটির (বা ভবিষ্যতের ব্যথার অন্তত কোনও সম্ভাব্য উত্স) মতো গন্ধ পাচ্ছে।


1
আমি মনে করি যে তিনি এই সরঞ্জামের চ্যানেলটি নির্মাণের চেষ্টা করছেন, এর অন্তর্ভুক্তগুলির সাথে ক্রস-কম্পাইল নয়।
কিথ লেইন

0

gnu/stubs-32.hপ্রোগ্রামে অন্তর্ভুক্ত নির্দেশিত হয় না। এটা একটা ব্যাক এন্ড ধরণ হেডার ফাইল gnu/stubs.h, ঠিক gnu/stubs-64.h। আপনি multilibউভয় যোগ করতে প্যাকেজ ইনস্টল করতে পারেন ।


0

# sudo অ্যাপ্লিকেশন g ++ ইনস্টল করুন - বহুবার

এই ত্রুটিটি 64-বিট মেশিনে (দেবিয়ান / উবুন্টু) ঠিক করা উচিত।


0

আপনি যদি অজগর সহ ম্যাক-ওএসএক্স টার্মিনালে এই সমস্যার মুখোমুখি হন তবে আপনি যে প্যাকেজগুলি ব্যবহার করছেন তার সংস্করণগুলি আপডেট করার চেষ্টা করুন। সুতরাং, অজগর থেকে আপনার ফাইলগুলিতে যান এবং যেখানে আপনি প্যাকেজগুলি নির্দিষ্ট করেছেন, সেগুলি ইন্টারনেটে উপলব্ধ সর্বশেষতম সংস্করণগুলিতে আপডেট করুন।


0

ডেবিয়ান / উবুন্টু ব্যবহারে:

sudo apt-get install g++-multilib libc6-dev-i386

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