Кросс-компиляция OpenLDAP для MIPS в Linux / Ubuntu 10.10 - PullRequest
1 голос
/ 24 июня 2011

Я пытаюсь кросс-компилировать openldap-2.4.23 на моей машине для разработки Ubuntu 10.10, используя набор инструментов mipsel-angstrom-linux, потому что это зависимость от ptlib-2.10.1 / opal-3.10.1, которые являются библиотекамичто я на самом деле хочу использовать.

Я установил скрипт build.sh с содержанием, показанным ниже.Это

#!/bin/sh
. /usr/local/angstrom/mipsel/environment-setup 

./configure CC=mipsel-angstrom-linux-gcc --host=mipsel-angstrom-linux --disable-bdb --disable-hdb --with-yielding_select=no &&

make depend &&
rm -rf install &&
mkdir install &&
make &&
make install DESTDIR=$PWD/install &&
sudo make install DESTDIR=/usr/local/angstrom/mipsel/mipsel-angstrom-linux

Сборка работает, но прерывается со следующим:

../../libtool: line 3297: cd: =/usr/lib: No such file or directory
libtool: link: warning: cannot determine absolute directory name of `=/usr/lib'
grep: =/usr/lib/libz.la: No such file or directory
/bin/sed: can't read =/usr/lib/libz.la: No such file or directory
libtool: link: `=/usr/lib/libz.la' is not a valid libtool archive
make[2]: *** [libldap.la] Error 1
make[2]: Leaving directory `/home/markus/Documents/VoIP/openldap-2.4.23/libraries/libldap'
make[1]: *** [all-common] Error 1
make[1]: Leaving directory `/home/markus/Documents/VoIP/openldap-2.4.23/libraries'
make: *** [all-common] Error 1

У меня тоже были проблемы с другими библиотеками, добавление LIBTOOL=libtool однажды смогло решить проблему.Я также попытался скомпилировать свой собственный mipsel-angstrom-linux-libtool, как это было предложено другим ресурсом, но это не сработало.

Я сделал grep libz -r . в каталоге source / build, но ничего не смог найти, я неЯ не знаю, где искать.

Я надеюсь, что кто-то может дать мне подсказку, которая позволит мне решить мою проблему.

edit: с использованием набора инструментов codeourcery я получаю result.c:961: undefined reference to lutil_memcmp'.

1 Ответ

2 голосов
/ 29 сентября 2011

с использованием LIBTOOL=libtool помогает, только если libtool, установленный в вашей системе, отличается от того, который поставляется с openldap и зависимостями.Но на самом деле эта проблема связана с libtool, а не с libz, как может указывать ошибка.Если вы посмотрите более внимательно на сообщение об ошибке, вы увидите, что =:

libtool: link: warning: cannot determine absolute directory name of `=/usr/lib'

, =/usr/lib - это не каталог.Откуда это =?Я нашел патч для libtool, ответственный за это в libtool-patches , который описывает новую функцию:

Если PATH начинается с sysroot, замените его на =

Я не знаю, в чем причина этого, но результат можно найти в файлах .la в вашей системе, возможно, запустите этот

grep "=/usr/lib" /usr/lib/*.la

в зависимости от того, куда вы устанавливаете свои библиотекинайдите их.Вы увидите определение dependency_libs, которое включает, вероятно, среди прочего строку =/usr/lib, и вот откуда берется дополнительная =.

Что делать?

обнаружив, что это неправильно.la файлы определяют, к какому программному обеспечению они относятся, и перестраивают их, используя LIBTOOL=/path/to/libtool2.2.

или, если это не работает:

perl -p -i -e 's/(func_replace_sysroot_result=")=/$1/' ltmain.sh &&
perl -p -i -e 's/\$\{lt_sysroot:\+=\}//' ltmain.sh

всего наилучшего,

Питер

...