Ошибка компоновщика gcc ELDK в ld.so.1 - PullRequest
6 голосов
/ 01 февраля 2012

У меня установлен ELDK-3.1 в Ubuntu, работающем отлично.

На другом компьютере с 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 `_dl_lookup_versioned_symbol_skip@GLIBC_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 (проект "автоматизирован").

Итак, я написал сценарий, пытаясь имитировать все, что делает мой автомат 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 "<contact@company>"
#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

Может ли кто-нибудь здесь подсказать, что мне не хватает, чтобы мои проекты отлично работали на одной коробке ине в другом?

Спасибо!

1 Ответ

6 голосов
/ 26 февраля 2012

Я не уверен на 100%, что он решает все проблемы, но он работает для нас.

Мы обнаружили, что символическая ссылка "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1 "в eldk-3.1 / usr / ppc-linux / lib устраняет ошибку компоновки.

Я подозреваю, что что-то изменилось в среде между F15 и F16.То же самое для OpenSUSE (11-> 12).Также была подана ошибка против Fedora https://bugzilla.redhat.com/show_bug.cgi?id=754695, которая была прекращена как преднамеренные изменения ABI.

...