LINUX.ORG.RU

Sourcery G++ MIPS. Ошибка сборки библиотеки libpng


0

1

Здравствуйте.

Прошу помочь мне с решением следующей проблемы.
Я хочу откомпилирвать midnight commander для медия плеера HDX BD-1
Железка собрана на процессоре Sigma Designs SMP8642. Внутри установлен linux:

sh-3.00# uname -a[br]
Linux tango3 2.6.22.19-27-sigma #11 PREEMPT Wed Aug 25 13:46:30 CST 2010 mips GNU/Linux
На Ubuntu 10.04 в каталог /home/akhromov/CodeSourcery я установил Sourcery G++ Lite 4.3-51 for MIPS GNU/Linux
Исходники проекта я загружаю в /home/akhromov/Stuff
Компилирую zlib:
$ cd ~/Stuff
$ wget [URL=http://zlib.net/zlib-1.2.4.tar.gz]http://zlib.net/zlib-1.2.4.tar.gz[/URL]
$ tar xvzf zlib-1.2.4.tar.gz
$ cd zlib-1.2.4
$ export PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH
$ CFLAGS='-EL -march=74kc -fPIC' \
   CXXFLAGS='-EL -march=74kc -fPIC' \
   CC=mips-linux-gnu-gcc \
   AR=mips-linux-gnu-ar \
   RANLIB=mips-linux-gnu-ranlib \
   ./configure --prefix=/home/akhromov/CodeSourcery/staging_dir
$ make
$ make install
Затем компилирую libpng-1.4.1:
$ cd ~/Stuff
$ wget [URL=ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.1.tar.gz]ftp://ftp.simplesystems.org/pub/libpng/pn...ng-1.4.1.tar.gz[/URL]
$ tar xvzf libpng-1.4.1.tar.gz
$ cd libpng-1.4.1
$ CFLAGS='-EL -march=74kc -fPIC' \
   CXXFLAGS='-EL -march=74kc -fPIC' \
   CC=mips-linux-gnu-gcc \
   AR=mips-linux-gnu-ar \
   RANLIB=mips-linux-gnu-ranlib \
   LDFLAGS="-L/home/akhromov/CodeSourcery/staging_dir/lib" \
   CPPFLAGS="-I/home/akhromov/CodeSourcery/staging_dir/include" \
   ./configure --prefix=/home/akhromov/CodeSourcery/staging_dir --host=mips-linux-gnu
$ make
Здесь получаю следующую ошибку:
/bin/sh ./libtool --tag=CC   --mode=link mips-linux-gnu-gcc  -EL -march=74kc -fPIC -no-undefined -export-dynamic -version-number 14:1:0 -Wl,--version-script=libpng.vers  -L/home/akhromov/CodeSourcery/staging_dir/lib -o libpng14.la -rpath /home/akhromov/CodeSourcery/staging_dir/lib libpng14_la-png.lo libpng14_la-pngset.lo libpng14_la-pngget.lo libpng14_la-pngrutil.lo libpng14_la-pngtrans.lo libpng14_la-pngwutil.lo libpng14_la-pngread.lo libpng14_la-pngrio.lo libpng14_la-pngwio.lo libpng14_la-pngwrite.lo libpng14_la-pngrtran.lo libpng14_la-pngwtran.lo libpng14_la-pngmem.lo libpng14_la-pngerror.lo libpng14_la-pngpread.lo  -lz -lm 
libtool: link: mips-linux-gnu-gcc -shared  .libs/libpng14_la-png.o .libs/libpng14_la-pngset.o .libs/libpng14_la-pngget.o .libs/libpng14_la-pngrutil.o .libs/libpng14_la-pngtrans.o .libs/libpng14_la-pngwutil.o .libs/libpng14_la-pngread.o .libs/libpng14_la-pngrio.o .libs/libpng14_la-pngwio.o .libs/libpng14_la-pngwrite.o .libs/libpng14_la-pngrtran.o .libs/libpng14_la-pngwtran.o .libs/libpng14_la-pngmem.o .libs/libpng14_la-pngerror.o .libs/libpng14_la-pngpread.o   -L/home/akhromov/CodeSourcery/staging_dir/lib -lz -lm  -march=74kc -Wl,--version-script=libpng.vers   -Wl,-soname -Wl,libpng14.so.14 -o .libs/libpng14.so.14.1.0
/home/akhromov/CodeSourcery/staging_dir/lib/libz.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[1]: *** [libpng14.la] Error 1
make[1]: Leaving directory `/home/akhromov/Stuff/libpng-1.4.1'
make: *** [all] Error 2
Файл libz.so ссылается правильно:
akhromov@x200s:~$ ls -la /home/akhromov/CodeSourcery/staging_dir/lib
total 320
drwxr-xr-x 3 akhromov akhromov   4096 2010-09-26 13:16 .
drwxr-xr-x 5 akhromov akhromov   4096 2010-09-26 13:16 ..
-rw-r--r-- 1 akhromov akhromov 166250 2010-09-26 13:16 libz.a
lrwxrwxrwx 1 akhromov akhromov     13 2010-09-26 13:16 libz.so -> libz.so.1.2.4
lrwxrwxrwx 1 akhromov akhromov     13 2010-09-26 13:16 libz.so.1 -> libz.so.1.2.4
-rwxr-xr-x 1 akhromov akhromov 147068 2010-09-26 13:16 libz.so.1.2.4
drwxr-xr-x 2 akhromov akhromov   4096 2010-09-26 13:16 pkgconfig
libz.so.1.2.4, имеет вроде, как правильный формат:
akhromov@x200s:~/Stuff$ mips-linux-gnu-objdump -af ~/CodeSourcery/staging_dir/lib/libz.so.1.2.4

/home/akhromov/CodeSourcery/staging_dir/lib/libz.so.1.2.4:     file format elf32-tradlittlemips
/home/akhromov/CodeSourcery/staging_dir/lib/libz.so.1.2.4
architecture: mips:isa32r2, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x000013c0
Если я не указываю флаги компилятора '-EL -march=74kc -fPIC', то сборка проходит нормально, но работать этот код не будет, потому как у меня архитектура mipsel.
Пробовал последнюю сборку CodeSourcery - результат тот же.
Сборка последней версии libpng-1.4.4 не помогла.
Вот нашел эту статью. Вроде как по моей теме: Avoiding libtool minefields when cross-compiling
Но как применить это к моему случаю не понимаю.

Подскажите, что я не так делаю, куда копать?

С уважением, Алексей.



Последнее исправление: Axa (всего исправлений: 1)

копай в сторону того, что libpng у тебя сейчас при линковке использует системный ld. скорее всего так.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT
$ CFLAGS='-EL -march=74kc -fPIC' \
   CXXFLAGS='-EL -march=74kc -fPIC' \
   CC=mips-linux-gnu-gcc \
   AR=mips-linux-gnu-ar \
   LD=mips-linux-gnu-ld \
   RANLIB=mips-linux-gnu-ranlib \
   LDFLAGS="-L/home/akhromov/CodeSourcery/staging_dir/lib" \
   CPPFLAGS="-I/home/akhromov/CodeSourcery/staging_dir/include" \
   ./configure --prefix=/home/akhromov/CodeSourcery/staging_dir --host=mips-linux-gnu LD=/home/akhromov/CodeSourcery/Sourcery_G++_Lite/bin/mips-linux-gnu-ld
...
...
...
$ make
...
...
...
/bin/sh ./libtool --tag=CC   --mode=link mips-linux-gnu-gcc  -EL -march=74kc -fPIC -no-undefined -export-dynamic -version-number 14:1:0 -Wl,--version-script=libpng.vers  -L/home/akhromov/CodeSourcery/staging_dir/lib -o libpng14.la -rpath /home/akhromov/CodeSourcery/staging_dir/lib libpng14_la-png.lo libpng14_la-pngset.lo libpng14_la-pngget.lo libpng14_la-pngrutil.lo libpng14_la-pngtrans.lo libpng14_la-pngwutil.lo libpng14_la-pngread.lo libpng14_la-pngrio.lo libpng14_la-pngwio.lo libpng14_la-pngwrite.lo libpng14_la-pngrtran.lo libpng14_la-pngwtran.lo libpng14_la-pngmem.lo libpng14_la-pngerror.lo libpng14_la-pngpread.lo  -lz -lm 
libtool: link: mips-linux-gnu-gcc -shared  .libs/libpng14_la-png.o .libs/libpng14_la-pngset.o .libs/libpng14_la-pngget.o .libs/libpng14_la-pngrutil.o .libs/libpng14_la-pngtrans.o .libs/libpng14_la-pngwutil.o .libs/libpng14_la-pngread.o .libs/libpng14_la-pngrio.o .libs/libpng14_la-pngwio.o .libs/libpng14_la-pngwrite.o .libs/libpng14_la-pngrtran.o .libs/libpng14_la-pngwtran.o .libs/libpng14_la-pngmem.o .libs/libpng14_la-pngerror.o .libs/libpng14_la-pngpread.o   -L/home/akhromov/CodeSourcery/staging_dir/lib -lz -lm  -march=74kc -Wl,--version-script=libpng.vers   -Wl,-soname -Wl,libpng14.so.14 -o .libs/libpng14.so.14.1.0
/home/akhromov/CodeSourcery/staging_dir/lib/libz.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[1]: *** [libpng14.la] Error 1
make[1]: Leaving directory `/home/akhromov/Stuff/libpng-1.4.1'
make: *** [all] Error 2

Нет. Не вышло.

Axa
() автор топика

попробовал собрать под арм (Sourcery G++, установлен в /opt/arm):

$ ls
libpng-1.4.3  zlib-1.2.5

$ cd zlib-1.2.5
$ make distclean
$ CROSS_PREFIX=/opt/arm/bin/arm-none-linux-gnueabi- ./configure --shared
......
$ file libz.so.1.2.5 
libz.so.1.2.5: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

$ cd ../libpng-1.4.3
$ make distclean
$ PATH=$PATH:/opt/arm/bin ./configure --host arm-none-linux-gnueabi LDFLAGS=-L$PWD/../zlib-1.2.5 CFLAGS=-I$PWD/../zlib-1.2.5 CPPFLAGS=-I$PWD/../zlib-1.2.5

$ PATH=$PATH:/opt/arm/bin make
......
$ file .libs/libpng14.so.14.3.0 
.libs/libpng14.so.14.3.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

другими словами, всё собралось, с минимумом опций. убедитесь, что ваш libz.so действительно под мипс собрался (в zlib configure самопальный).

arsi ★★★★★
()
Ответ на: комментарий от arsi

Спасибо огромное за ответ.

Если я собираю без флагов mipsel '-EL -march=74kc -fPIC', то все хорошо линкуется.

Как только ставлю -EL - все ломается.

Хотя в zlib я не вижу криминала:

$ file libz.so.1.2.4 libz.so.1.2.4: ELF 32-bit LSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, with unknown capability 0xf41 = 0x756e6700, not stripped

Axa
() автор топика
Ответ на: комментарий от Axa

> Как только ставлю -EL - все ломается.

libtool такой libtool…

последняя команда (линковка), в исполнении libtool (понятия не имею, кому он «-EL» пропил):

mips-linux-gnu-gcc -shared  .libs/libpng14_la-png.o .libs/libpng14_la-pngset.o .libs/libpng14_la-pngget.o .libs/libpng14_la-pngrutil.o .libs/libpng14_la-pngtrans.o .libs/libpng14_la-pngwutil.o .libs/libpng14_la-pngread.o .libs/libpng14_la-pngrio.o .libs/libpng14_la-pngwio.o .libs/libpng14_la-pngwrite.o .libs/libpng14_la-pngrtran.o .libs/libpng14_la-pngwtran.o .libs/libpng14_la-pngmem.o .libs/libpng14_la-pngerror.o .libs/libpng14_la-pngpread.o   -L/home/akhromov/CodeSourcery/staging_dir/lib -lz -lm  -march=74kc -Wl,--version-script=libpng.vers   -Wl,-soname -Wl,libpng14.so.14 -o .libs/libpng14.so.14.1.0

а теперь запускаем то же самое вручную, но дописываем сразу после «mips-linux-gnu-gcc» недостающую опцию «-EL»:

mips-linux-gnu-gcc -EL -shared  .libs/libpng14_la-png.o .libs/libpng14_la-pngset.o .libs/libpng14_la-pngget.o .libs/libpng14_la-pngrutil.o .libs/libpng14_la-pngtrans.o .libs/libpng14_la-pngwutil.o .libs/libpng14_la-pngread.o .libs/libpng14_la-pngrio.o .libs/libpng14_la-pngwio.o .libs/libpng14_la-pngwrite.o .libs/libpng14_la-pngrtran.o .libs/libpng14_la-pngwtran.o .libs/libpng14_la-pngmem.o .libs/libpng14_la-pngerror.o .libs/libpng14_la-pngpread.o   -L/home/akhromov/CodeSourcery/staging_dir/lib -lz -lm  -march=74kc -Wl,--version-script=libpng.vers   -Wl,-soname -Wl,libpng14.so.14 -o .libs/libpng14.so.14.1.0

всё отлично линкуется…

решение костыль: при конфигурации libpng указывать «CC='mips-linux-gnu-gcc -EL'»…

arsi ★★★★★
()
Ответ на: комментарий от arsi

Спасибо огромное. Все получилось.

Сбило с толку, что при вызове libtool целых два раза указывалось -EL Даже подумать не мог, что он его похерил...

Axa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.