2012-02-01 18 views
6

में मेरे पास एक उबंटू बॉक्स में पूरी तरह से काम कर रहा है ELDK-3.1 स्थापित है।ईएलडीके जीसीसी लिंकर त्रुटि ld.so.1

एक और मशीन में, 64 बिट्स ओपनस्यूज 12.1 चलाते हुए, मैंने ईएलडीके स्थापना को क्लोन किया और कुछ समय के लिए यह बहुत अच्छी तरह से काम किया।

अब जब मैं अपनी परियोजनाओं को कॉन्फ़िगर करने की कोशिश मैं देख रहा हूँ:

configure: error: C compiler cannot create executables 
See `config.log' for more details 

और लॉग दिखाता है:

configure:3411: ppc-linux-gcc conftest.c >&5 
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: warning: ld.so.1, needed by /opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6, not found (try using -rpath or -rpath-link) 
/opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6: undefined reference to `_dl_looku[email protected]_PRIVATE' 
... 

फ़ाइल ld.so.1libc.so.6 रूप में एक ही निर्देशिका में है।

s -l /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 
lrwxrwxrwx 1 root root 11 Jan 31 11:43 /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 -> ld-2.3.1.so 

जहां तक ​​मैं देख सकता हूँ, मैं सही ढंग से सभी आवश्यक पर्यावरण को परिभाषित कर रहा हूँ और Ubuntu बॉक्स (परियोजना "automaked" है) के रूप में बिल्कुल वैसा ही निर्माण प्रणाली का उपयोग कर बनाने की कोशिश।

तो मैं एक स्क्रिप्ट सब कुछ की नकल करने की कोशिश कर लिखा था मेरी automaked configure करता है:

#!/bin/bash 


if [ ! -f confdefs.c ]; then 
    cat > confdefs.c << EOF 
/* confdefs.h */ 
#define PACKAGE_NAME "xyz" 
#define PACKAGE_TARNAME "xyz" 
#define PACKAGE_VERSION "1.00" 
#define PACKAGE_STRING "xyz 1.00" 
#define PACKAGE_BUGREPORT "<[email protected]>" 
#define PACKAGE_URL "" 
#define PACKAGE "xyz" 
#define VERSION "1.00" 
/* end confdefs.h. */ 

int 
main() 
{ 

; 
return 0; 
} 
EOF 
fi 

ARCH=powerpc 
export CROSS_COMPILE=ppc_8xx 
TOOLCHAIN=ppc-linux- 
TOOLCHAIN_ROOT=/opt/ELDK 
LD=`which ${TOOLCHAIN}ld` 
CC=`which ${TOOLCHAIN}gcc` 
GCC=$CC 
export CFLAGS="-Wall -g -I${TOOLCHAIN_ROOT}/ppc_8xx/usr/include/" 
export CPPFLAGS=$CFLAGS 
# export LDFLAGS="-shared" 

$CC $CFLAGS $LDFLAGS confdefs.c -o confdefs 

यह मैं configure के रूप में बिल्कुल एक ही त्रुटि देता है।

यदि मैं दूसरी तरफ export LDFLAGS="-shared" लाइन को अपूर्ण करता हूं, तो यह पूरी तरह से बनाता है!

> ls -l confdefs 
-rwxr-xr-x 1 myself users 16136 Fev 1 09:52 confdefs 
> file confdefs 
confdefs: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped 

यहाँ किसी को भी मुझे के किसी भी सुराग दे सकता है कि मैं क्या इतना है कि अपनी परियोजनाओं अन्य में एक बॉक्स पर बारीक काम करते हैं और नहीं याद आ रही है?

धन्यवाद!

+0

अपनी परियोजना पर फिर से ऑटोमैक और ऑटोकॉन्फ़ चलाने की कोशिश करें। बीटीडब्लू, एसएसओ एक्सटेंशन का मतलब है कि यह एक साझा ऑब्जेक्ट है, आपको उन साझा ऑब्जेक्ट्स का सही ढंग से उपयोग करने के लिए "-shared" सक्षम होना चाहिए। –

+1

आपको वही त्रुटि मिली है जो मैं Fedora 16 x86_64 पर स्विच करते समय हूं। अब तक हमें निम्नलिखित सिम्लिंक जोड़कर समाधान मिला है "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" से bigk-3.1/usr/ppc-linux/lib मुझे संदेह है कि एफ 15 और एफ 16 के बीच पर्यावरण के साथ कुछ बदल गया है। OpenSUSE के लिए वही (11-> 12)। –

+0

अरे सर्गेई, कृपया एक उत्तर पोस्ट करें, इसलिए मैं इसे चुन सकता हूं। आपका कामकाज मेरे लिए काम किया। यह कुछ समझ में आता है क्योंकि लिंकर स्क्रिप्ट्स 'SEARCH_DIR ("/ usr/ppc-linux/lib") जैसे कुछ इंगित करती हैं, लेकिन मुझे अभी भी समझ में नहीं आ रहा है कि यह एक distro पर क्यों काम करता है और दूसरे में नहीं। मुझे लगता है कि यह उनके डेवेल पैकेज (ऑटोटूल या कुछ ऐसा) में मतभेदों के बारे में है। धन्यवाद! – j4x

उत्तर

6

मुझे 100% यकीन नहीं है कि यह सभी समस्याओं को हल करता है, लेकिन यह हमारे लिए काम करता है।

हमने पाया कि symlink "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" से bigk-3.1/usr/ppc-linux/lib हल करने में त्रुटि हल करता है ।

मुझे संदेह है कि एफ 15 और एफ 16 के बीच पर्यावरण के साथ कुछ बदल गया है। OpenSUSE के लिए वही (11-> 12)। फेडोरा https://bugzilla.redhat.com/show_bug.cgi?id=754695 के खिलाफ भी बग सबमिट किया गया था जिसे जानबूझकर एबीआई परिवर्तन के रूप में समाप्त कर दिया गया था।

+1

यह मेरे लिए बहुत उपयोगी था, धन्यवाद। यह ईएलडीके के पुराने संस्करण के लिए भी काम करता है। – Nikko

संबंधित मुद्दे