2012-02-01 15 views
6

私は完全に動作するUbuntuボックスに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.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 

私の知る限り見ることができるように、私が正しく(プロジェクトが「automaked」である)、すべての必要な環境を定義し、Ubuntuのボックスと全く同じビルドシステムを使用して構築しようとしています。だから私は私のconfigureをautomakedすべてを模倣しようとしているスクリプトを書きました

はありません:

#!/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"という行のコメントを外すと、完全にビルドされます。私のプロジェクトは、他に1箱の上に細かく動作しないように

> 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を再度実行してみます。ところで、.so拡張子は共有オブジェクトであることを意味します。共有オブジェクトを正しく使用するには、 "-shared"を有効にする必要があります。 –

+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)と同じです。 –

+0

ちょっとSergey、私はそれを選ぶことができるので、答えを投稿してください。あなたの回避策は私のために働いた。リンカスクリプトが 'SEARCH_DIR("/usr/ppc-linux/lib ")'のようなものを指しているので意味がありますが、なぜそれが別のディストリビューションで動作するのか理解できません。私はそれが彼らの開発パッケージ(autotoolsまたは何かのようなもの)の違いについてだと思います。ありがとう! – j4x

答えて

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