Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > GNU toolchain > Sourcery G++ MIPS. Ошибка сборки библиотеки libpng


Автор: AxaRu 29.9.2010, 13:56
Здравствуйте.

Прошу помочь мне с решением следующей проблемы.
Я хочу откомпилирвать midnight commander для медия плеера http://www.hdx1080.com/where-to-buy/hdx-web-shop?page=shop.product_details&flypage=flypage.ilvm_blue.tpl&product_id=4&category_id=1
Железка собрана на процессоре Sigma Designs SMP8642.
Внутри установлен linux:
Цитата
sh-3.00# uname -a
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 я установил http://www.codesourcery.com/sgpp/lite/mips/portal/release607
Исходники проекта я загружаю в /home/akhromov/Stuff
Компилирую zlib:
Цитата
$ cd ~/Stuff
$ wget http://zlib.net/zlib-1.2.4.tar.gz
$ 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 ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.1.tar.gz
$ tar xvzf libpng-1.4.1.tar.gz
$ cd libpng-1.4.1
$ CFLAGS='-EL -march=74kc -fPIC' \
   CXXFLAGS='-EL -march=74kc -fPIC' \
   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

Здесь получаю следующую ошибку:
Цитата
/home/akhromov/CodeSourcery/staging_dir/lib/libz.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status

Файл 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 не помогла.
Вот нашел эту статью. Вроде как по моей теме: http://www.metastatic.org/text/libtool.html
Но как применить это к моему случаю не понимаю.

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

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

Автор: smoke_man 29.9.2010, 14:44
При сборке libpng -  СС указывает на mips-linux-gnu-gcc?

Автор: AxaRu 29.9.2010, 14:52
Да.

Автор: smoke_man 29.9.2010, 15:26
Только что собрал libpng под mips. Правда своим тулчейном. Все собралось без ошибок. Попробуй сделать Makefile, в котором делаешь export всех необходимых переменных и создай правила для сборки zlib и libpng.

Автор: AxaRu 29.9.2010, 16:06
Вот тут и не ясно каких необходимых... Makefile генерятся configure и что туда добавить я как раз и не знаю...

Собственно заканчивается ошибкой на этой команде:
Цитата
/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  -EL -march=74kc -fPIC -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 -march=74kc   -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


Автор: smoke_man 29.9.2010, 16:32
А при конфигурации zlib ключ --host указывал?

Автор: AxaRu 29.9.2010, 16:45
Нет. Сейчас пересоберу.
Ан-нет
Цитата
$  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
unknown option: --host=mips-linux-gnu


Автор: smoke_man 29.9.2010, 16:49
Насчет Makefile. Есть рабочая директория, в которой находятся директории с исходниками libpng и zlib, а так же дира fs, в которую происходит установка. 
Создается Makefile со следующими правилами:
Код

export BUILD_DIR=$(shell pwd)
INSTALL_DIR=$(BUILD_DIR)/fs
CROSS_COMPILE=$(TOOLCHAIN_PATH)/bin/mips-linux-gnu-
export CROSS_COMPILE
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
LD=$(CROSS_COMPILE)ld
.......................................
export CC AR LD и т.д

APP=zlib libpng
.PHONY : $(APP)

all : $(APP)

zlib:
         cd $@; ./configure --host=mips-linux-gnu && make && make install DESTDIR=$(INSTALL_DIR);
libpng:
         cd $@; ./configure --host=mips-linux-gnu CFLAGS="-L$(INSTALL_DIR)/usr/lib -I$(INSTALL_DIR)/usr/include"&& make && make install DESTDIR=$(INCLUDE_DIR);

Т.е. при добавлении нового приложения необходимо просто добавить правило. А собирается это просто вызовом make.

Добавлено через 4 минуты и 49 секунд
Да, согласен у zlib нет опции host. В общем то, что выше как пример привел.

Автор: AxaRu 29.9.2010, 17:03
За общий makefile спасибо, но что мне делать с моей сборкой?
Вот еще что не ясно. Если я не указываю:
Цитата
   LDFLAGS="-L/home/akhromov/CodeSourcery/staging_dir/lib" \
   CPPFLAGS="-I/home/akhromov/CodeSourcery/staging_dir/include" \

он начинает ругаться. Почему он не подставляет lib и include к --prefix=/home/akhromov/CodeSourcery/staging_dir?

Автор: smoke_man 29.9.2010, 17:07
а попробуй сконфигурить таким образом:
Код

./configure --host=mips-linux-gnu CFLAGS="-Lzlib_path -I zlib_include" --prefix=you_path && make

Автор: AxaRu 29.9.2010, 17:19
zlib установлена в /home/akhromov/CodeSourcery/staging_dir

Цитата
akhromov@x200s:~/CodeSourcery/staging_dir$ ls /home/akhromov/CodeSourcery/staging_dir/include
libpng14  zconf.h  zlib.h
akhromov@x200s:~/CodeSourcery/staging_dir$ ls /home/akhromov/CodeSourcery/staging_dir/lib
libz.a  libz.so  libz.so.1  libz.so.1.2.4  pkgconfig


Цитата
$  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 \
   ./configure --prefix=/home/akhromov/CodeSourcery/staging_dir --host=mips-linux-gnu CFLAGS="-L/home/akhromov/CodeSourcery/staging_dir/lib -I/home/akhromov/CodeSourcery/staging_dir/include"


Цитата
 . . .
 . . .
 . . .
checking for memset... yes
checking for pow... (cached) no
checking for pow in -lm... (cached) yes
checking for zlibVersion in -lz... no
configure: error: zlib not installed
akhromov@x200s:~/Stuff/libpng-1.4.1$ 


Автор: smoke_man 29.9.2010, 17:24
Тогда как домой приеду - попробую твоим тулчейном собрать и отпишусь.

Автор: AxaRu 29.9.2010, 17:27
Спасибо.

Автор: smoke_man 29.9.2010, 19:19
что выдает
Код

 file zlib.so.1.2.4

Автор: AxaRu 29.9.2010, 19:40
Цитата
$ 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 

Автор: smoke_man 29.9.2010, 20:49
Собрал такой командой:
Код

./configure --host=mips-linux-gnu CFLAGS=" -fPIC -mel -L$(INSTALL_DIR)/usr/local/lib -I $(INSTALL_DIR)/usr/local/include" && make && make install DESTDIR=$(INSTALL_DIR)


Код

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


Автор: AxaRu 29.9.2010, 22:35
smoke_man , огромное спасибо, что нашел время для меня.

Сейчас изучу

Человек с LOR'a нашел баг в libtool и предложил вот еще один способ решения костылем: CC='mips-linux-gnu-gcc -EL'

Автор: smoke_man 29.9.2010, 23:13
Не за что!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)