कैसे ठीक करने के लिए "असंगत /usr/lib/libc.a" लंघन


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

मुझे मेक (मेक 381) के पुराने संस्करण का उपयोग करने की आवश्यकता है क्योंकि संभवतः कर्नेल पुराना और अनुकूलित (2.6.22.19-39-सिग्मा) है और लक्ष्य MIPS है। मैंने अपने सिस्टम पर ncurses-static, glibc-static.i686 और glibc-devel.i686 भी स्थापित किए हैं। क्या मुझे make381 के लिए एक संगत libc.a की आवश्यकता है? यदि हां, मुझे यह कहां मिल सकता है? यदि नहीं, तो मैं इस निर्माण को ठीक करने के लिए कहां देखूं?

पूर्ण कंसोल आउटपुट यहां है


@ मर्कप्लॉटिक: ऐसा नहीं लगता है कि क्रॉस जीसीसी दुर्घटनाग्रस्त हो रहा है, बल्कि पीसी (x86) का उपयोग किया जाता है जो कुछ टूल बनाने के लिए उपयोग किया जाता है। मैंने इसे दिखाने के लिए मूल पोस्ट में कंसोल आउटपुट का विस्तार किया है और यहां पूर्ण कंसोल आउटपुट जोड़ा है
जैकनाद

जवाबों:


9

makeअपने आप में समस्या के साथ बहुत कुछ करने की संभावना नहीं है। गलत टूलकिन और / या पुस्तकालयों के उपयोग के लक्षण विशिष्ट हैं। आउटपुट इंगित करता है कि उपयोग में लिंकर स्टॉक फेडोरा है ld, जो 64 बिट फेडोरा पर होगा जिसका मतलब है कि x86_64 बायनेरिज़ बनाने में सक्षम एक टूलचैन।

skipping incompatible /usr/lib/libc.a

आपको बताता है, कि लिंकर के साथ जोड़ने की कोशिश की /usr/lib/libc.aलेकिन यह (बाइनरी) में संकलित कोड के बाकी के साथ असंगत पाया md5_x86_64.oऔर mfsrv_x86_64.o। यह आमतौर पर एक आर्किटेक्चर मिसमैच के कारण उत्पन्न होता है - इस मामले में ऐसा लगता है कि बिल्ड सिस्टम 64 बिट ऑब्जेक्ट फ़ाइलों को 32 बिट लाइब्रेरी के साथ लिंक करने का प्रयास करता है (ध्यान दें कि 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 बिट फ्लेवर दोनों का उपयोग करके भाग। जो सब ठीक हो सकता है, लेकिन थोड़ा अजीब लगता है।

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