2012-02-01 18 views
6

Tôi đã cài đặt ELDK-3.1 trong hộp Ubuntu hoạt động hoàn hảo.Lỗi liên kết ELDK gcc trong ld.so.1

Trong một máy khác, chạy 64 bit OpenSuse 12.1, tôi nhân bản cài đặt ELDK và, trong một thời gian nó hoạt động rất tốt.

Bây giờ khi tôi cố gắng để cấu hình các dự án của tôi, tôi thấy:

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

Và nhật ký cho thấy:

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 `[email protected]_PRIVATE' 
... 

File ld.so.1 là trong cùng thư mục với libc.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 

Theo như tôi thấy, tôi đang xác định một cách chính xác tất cả các môi trường cần thiết và cố gắng xây dựng sử dụng chính xác các hệ thống xây dựng tương tự như trong Ubuntu hộp (dự án được "automaked").

Vì vậy, tôi đã viết một kịch bản cố gắng bắt chước tất cả mọi thứ của tôi automaked configure làm:

#!/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 

này mang lại cho tôi một cách chính xác những lỗi tương tự như configure.

Nếu tôi bỏ ghi chú dòng export LDFLAGS="-shared", mặt khác, nó xây dựng hoàn hảo !.

> 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 

Có ai ở đây vui lòng cho tôi biết bất kỳ thứ gì tôi thiếu để dự án của tôi hoạt động tốt trên một hộp chứ không phải trong hộp kia?

Cảm ơn!

+0

Thử chạy lại automake và autoconf trên dự án của bạn. BTW, phần mở rộng .so có nghĩa là nó là một đối tượng được chia sẻ, bạn nên bật tính năng "chia sẻ" để sử dụng đúng các đối tượng được chia sẻ đó. –

+1

Bạn gặp lỗi tương tự như vậy, trong khi chuyển sang Fedora 16 x86_64. Cho đến nay chúng tôi đã tìm thấy giải pháp bằng cách thêm liên kết sau "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" vào eldk-3.1/usr/ppc-linux/lib Tôi nghi ngờ một cái gì đó thay đổi với môi trường giữa F15 và F16. Tương tự cho OpenSUSE (11-> 12). –

+0

Xin chào Sergey, hãy đăng câu trả lời để tôi có thể chọn câu trả lời. Cách giải quyết của bạn đã hiệu quả với tôi. Nó có ý nghĩa gì đó vì các kịch bản liên kết trỏ đến một cái gì đó như 'SEARCH_DIR ("/usr/ppc-linux/lib ")', nhưng tôi vẫn không thể hiểu tại sao nó hoạt động trên một bản phân phối và không làm việc khác. Tôi cho rằng đó là về sự khác biệt trong các gói devel của họ (autotools hoặc một cái gì đó như thế). Cảm ơn! – j4x

Trả lời

6

Tôi không chắc chắn 100% rằng nó giải quyết được mọi vấn đề, nhưng nó phù hợp với chúng tôi.

Chúng tôi phát hiện ra rằng liên kết tượng trưng "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" để giải quyết lỗi liên kết eldk-3.1/usr/ppc-linux/lib .

Tôi nghi ngờ có điều gì đó thay đổi với môi trường giữa F15 và F16. Tương tự cho OpenSUSE (11-> 12). Ngoài ra lỗi đã được đệ trình chống lại Fedora https://bugzilla.redhat.com/show_bug.cgi?id=754695 đã bị chấm dứt khi có thay đổi ABI có chủ định.

+1

điều này rất hữu ích cho tôi, cảm ơn. Nó hoạt động cho phiên bản cũ của ELDK. – Nikko

Các vấn đề liên quan