2012-02-01 29 views
6

我在ELDK-3.1中安裝了完美的ELDK-3.1。ld.so.1中的ELDK gcc鏈接器錯誤

在另一臺運行64位OpenSuse 12.1的機器上,我克隆了ELDK安裝,並在一段時間內運行得非常好。

現在,當我嘗試配置我的項目,我看到:

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

文件ld.so.1是在同一個目錄中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 

據我所看到的,我是正確定義所有需要的環境,並嘗試使用完全相同的構建系統如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

嘗試再次在您的項目上運行automake和autoconf。 BTW,.so擴展意味着它是一個共享對象,您應該啓用「-shared」來正確使用這些共享對象。 – 2012-02-07 22:59:40

+1

您在切換到Fedora 16 x86_64時遇到同樣的錯誤。到目前爲止,我們已經找到了解決方案,將以下符號鏈接「ld.so.1 - > ../../../ppc_8xx/lib/ld.so.1」添加到eldk-3.1/usr/ppc-linux/lib我懷疑F15和F16之間的環境發生了變化。同樣適用於OpenSUSE(11-> 12)。 – 2012-02-24 03:02:11

+0

嘿謝爾蓋,請張貼一個答案,所以我可以選擇它。您的解決方法適用於我。這是有道理的,因爲鏈接器腳本指向類似'SEARCH_DIR(「/ usr/ppc-linux/lib」)',但我仍然不明白爲什麼它在一個發行版上運行,而不是在另一個發行版上運行。我想這是關於他們的開發包(自動工具或類似的)的差異。謝謝! – j4x 2012-02-24 13:47:17

回答

6

我不是100%確定它解決了所有問題,但它適用於我們。

我們發現到eldk-3.1/usr/ppc-linux/lib的符號鏈接「ld.so.1 - > ../../../ppc_8xx/lib/ld.so.1」解決了鏈接錯誤。

我懷疑F15和F16之間的環境發生了變化。同樣適用於OpenSUSE(11-> 12)。 也提交了針對Fedora https://bugzilla.redhat.com/show_bug.cgi?id=754695的錯誤,該錯誤因故意的ABI更改而終止。

+1

這對我很有幫助,謝謝。它也適用於老版本的ELDK。 – Nikko 2013-01-11 15:53:53