Библиотека не может быть скомпилирована, если "autoreconf -i" запускался раньше ./configure - PullRequest
1 голос
/ 11 октября 2011

Я работаю с инструментом, который должен упростить процесс сборки приложений на основе Unix.Одна из вещей, которые он делает автоматически, запускается "autoreconf -i" перед выполнением "./configure".Однако, когда он пытается собрать библиотеку expat в OSX (Lion), сборка завершается неудачно:

$ tar xfz expat-2.0.1.tar.gz; cd expat-2.0.1
$ autoreconf -i
glibtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `conftools'.
glibtoolize: copying file `conftools/ltmain.sh'
glibtoolize: You should add the contents of the following files to `aclocal.m4':
glibtoolize:   `/usr/bin/../share/aclocal/libtool.m4'
glibtoolize:   `/usr/bin/../share/aclocal/ltoptions.m4'
glibtoolize:   `/usr/bin/../share/aclocal/ltversion.m4'
glibtoolize:   `/usr/bin/../share/aclocal/ltsugar.m4'
glibtoolize:   `/usr/bin/../share/aclocal/lt~obsolete.m4'
glibtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
glibtoolize: rerunning glibtoolize, to keep the correct libtool macros in-tree.
glibtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
$ ./configure
(Lots of output here)
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING:  Makefile.in seems to ignore the --datarootdir setting
config.status: creating expat_config.h    
$ make
bin/sh ./libtool --silent --mode=compile gcc -std=gnu99 -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o lib/xmlparse.lo -c lib/xmlparse.c
./libtool: line 473: CDPATH: command not found
./libtool: line 1297: func_opt_split: command not found
libtool: Version mismatch error.  This is libtool 2.2.10, but the
libtool: definition of this LT_INIT comes from an older release.
libtool: You should recreate aclocal.m4 with macros from libtool 2.2.10
libtool: and run autoconf again.

С другой стороны, если я не делаю autoreconf сначала, онbuild just fiine:

$ cd ..; rm -r expat-2.0.1; tar xfz expat-2.0.1.tar.gz; cd expat-2.0.1
$ ./configure
(Lots of output here)
configure: creating ./config.status
config.status: creating Makefile
config.status: creating expat_config.h    
$ make
/bin/sh ./libtool --silent --mode=compile gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o lib/xmlparse.lo -c lib/xmlparse.c
/bin/sh ./libtool --silent --mode=compile gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o lib/xmltok.lo -c lib/xmltok.c
/bin/sh ./libtool --silent --mode=compile gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o lib/xmlrole.lo -c lib/xmlrole.c
/bin/sh ./libtool --silent --mode=link gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -no-undefined -version-info 6:2:5 -rpath /usr/local/lib  -o libexpat.la lib/xmlparse.lo lib/xmltok.lo lib/xmlrole.lo
gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o xmlwf/xmlwf.o -c xmlwf/xmlwf.c
gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o xmlwf/xmlfile.o -c xmlwf/xmlfile.c
gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o xmlwf/codepage.o -c xmlwf/codepage.c
gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H -o xmlwf/unixfilemap.o -c xmlwf/unixfilemap.c
/bin/sh ./libtool --silent --mode=link gcc -I./lib -I. -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -fexceptions  -DHAVE_EXPAT_CONFIG_H  -o xmlwf/xmlwf xmlwf/xmlwf.o xmlwf/xmlfile.o xmlwf/codepage.o xmlwf/unixfilemap.o libexpat.la

Что делает autoreconf -i и почему это приводит к сбою сборки?

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Я думаю, что проблема здесь:

libtool: Version mismatch error.  This is libtool 2.2.10, but the
libtool: definition of this LT_INIT comes from an older release.
libtool: You should recreate aclocal.m4 with macros from libtool 2.2.10
libtool: and run autoconf again.

По моему опыту с OS X Leopard и Snow Leopard (я еще не пробовал Lion), автоинструменты, фактически установленные с OS X, не достаточно недавние, чтобына самом деле перенастроить что-нибудь для системы.Поэтому я обычно беру последние автоинструменты с зеркала GNU и делаю их локальную версию, если мне нужно перенастроить.

"autoreconf -i" копирует файлы из установленных автоинструментов GNU в AC_CONFIG_AUX_DIR, в данном случае этовероятно ltmain.sh.

0 голосов
/ 13 октября 2011

Пользователь никогда не должен запускать autoreconf. Как указывает ldav1s (+1), установленные на вашем автоинструменте инструменты не соответствуют инструментам, используемым для создания архива. Существует множество пакетов, которые рекомендуют (или даже требуют), чтобы пользователь запустил autoconf в той или иной форме для сборки пакета; эти пакеты сломаны. Правильно собранный пакет должен собираться на машине, на которой не установлены какие-либо автоинструменты, и, если вы не являетесь сопровождающим пакета, вам, вероятно, следует просто удалить их. ИМО, они не должны быть включены в установки по умолчанию.

Если вы используете пакет, для сборки которого требуется автоинструмент, сообщите об этом как об ошибке сопровождающему пакета. Если в качестве механизма распространения используется система контроля версий (например, git, hg, svn), то вам нужно будет либо запустить автоинструмент для сборки пакета, либо пакет должен будет включать файлы, генерируемые автоинструментами, в хранилище. Вот почему системы контроля версий не должны использоваться в качестве инструмента распространения для пакетов, которые используют автоинструменты.

...