কীভাবে "স্কিপিং বেমানান / ইউএসআর / লাইব / লিবিসি.এ" স্থির করবেন


13

আমি যখন একটি 64 বিট ফেডোরা 16 (ভার্ন) এ এমবেডেড লিনাক্স লক্ষ্য তৈরি করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

make[3]: Entering directory `/export/home/git/minerva-5.x/third_party/multifiles'
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o md5.o md5.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o bitmapfs.o bitmapfs.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o mfcln.o mfcln.c
mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c
gcc -O -Wall -m32 -c -o mfsrv_x86_32.o mfsrv.c
gcc -O -m32 -o mfsrv32 md5_x86_32.o mfsrv_x86_32.o
gcc -O -m32 -static -o mfsrv32-static md5_x86_32.o mfsrv_x86_32.o
gcc -O -Wall -c -o md5_x86_64.o md5.c
gcc -O -Wall -c -o mfsrv_x86_64.o mfsrv.c
gcc -O -o mfsrv64 md5_x86_64.o mfsrv_x86_64.o
gcc -O -static -o mfsrv64-static md5_x86_64.o mfsrv_x86_64.o
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.6.3/../../../libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make[3]: *** [mfsrv64-static] Error 1

কার্নেলটি পুরানো এবং কাস্টমাইজড (2.6.22.19-39-সিগমা) এবং লক্ষ্যটি এমআইপিএস হওয়ায় সম্ভবত আমাকে মেকের একটি পুরানো সংস্করণ (মেক 381) ব্যবহার করতে হবে। আমি আমার সিস্টেমে ncurses-static, glibc-static.i686 এবং glibc-devel.i686 ইনস্টল করেছি। আমার কি 38 মেকিংয়ের জন্য একটি সুসংগত libc.a দরকার? যদি তা হয় তবে আমি এটি কোথায় পাব? যদি তা না হয় তবে এই বিল্ডটি ঠিক করার জন্য আমি কোথায় খুঁজছি?

সম্পূর্ণ কনসোল আউটপুট এখানে


@ মার্কপ্লটনিক: এটি দেখে মনে হচ্ছে না যে ক্রস জিসিসি ক্র্যাশ করছে তবে এটি পিসি (x86) যা কিছু সরঞ্জাম তৈরিতে ব্যবহৃত হয়। এটি দেখানোর জন্য আমি মূল পোস্টে কনসোল আউটপুট প্রসারিত করেছি এবং এখানে সম্পূর্ণ কনসোল আউটপুট যুক্ত করেছি ।
jacknad

উত্তর:


9

makeসমস্যাটির সাথে নিজেই সম্ভবত খুব বেশি কিছু করার নেই। লক্ষণগুলি ভুল সরঞ্জামচেন এবং / অথবা লাইব্রেরি ব্যবহারের জন্য সাধারণ। আউটপুটটি ইঙ্গিত করে যে ব্যবহারকারীর লিঙ্কারটি হ'ল স্টক ফেডোরা ld, যা bit৪ বিট ফেডোরার অর্থ এমন একটি সরঞ্জামচেন যা x86_64 বাইনারি তৈরি করতে সক্ষম।

skipping incompatible /usr/lib/libc.a

আপনি বলে, যে linker সঙ্গে লিঙ্ক চেষ্টা /usr/lib/libc.aকিন্তু এটা (বাইনারি) এ কম্পাইল কোড বাকি সঙ্গে বেমানান পাওয়া md5_x86_64.oএবং mfsrv_x86_64.o। এটি সাধারণত কোনও আর্কিটেকচারের অমিলের কারণে উত্থিত হয় - এই ক্ষেত্রে মনে হয় যে বিল্ড সিস্টেম একটি 32 বিট লাইব্রেরির সাথে একটি 64 বিট অবজেক্ট ফাইলগুলি লিঙ্ক করার চেষ্টা করে (নোট করুন যে 32 বিট বাইনারি সহ একই কমান্ডটি -m32কেবল জরিমানা দিয়ে গেছে)। এইভাবে মনে হয় যে 64 বিট বাইনারি লিঙ্ক করার সময় সংকলকটি সঠিক বিকল্পগুলি পাচ্ছে না। ডিবাগিংয়ের প্রথম পদক্ষেপ হিসাবে আপনি ম্যানুয়ালি বিল্ডিংয়ের চেষ্টা করতে পারেন - অর্থ হাতে বিল্ড ট্রিতে ব্যর্থ কমান্ড জারি করতে।

আপনার ক্ষেত্রে যেটি বরং অবাক করা (কমপক্ষে আমার জন্য) তা হ'ল:

mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c

এটি হ'ল: ক্রস টুলচেন ব্যবহার করে বিল্ডের একটি অংশ এবং স্থানীয় অংশটি ব্যবহার করে এবং 64 বিট এবং 32 বিট উভয় স্বাদে। যা ঠিক আছে তবে কিছুটা অদ্ভুত লাগছে।

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