2

Unix ベースのアプリのビルド プロセスを簡素化するツールを使用しています。自動的に行うことの 1 つは、「./configure」を実行する前に「autoreconf -i」を実行することです。ただし、 OSX (Lion) でexpatライブラリをビルドしようとすると、ビルドは失敗します。

$ 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 を実行しないと、うまくビルドできません:

$ 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」は何をしているのですか? なぜビルドが失敗するのですか?

4

2 に答える 2

4

問題はここにあると思います:

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 で実際にインストールされた autotools は、実際にシステム用に何かを再構成できるほど最近のものではありません。そのため、通常、GNU ミラーから最新の autotools を取得し、再構成が必要な場合はそれらのローカル バージョンを作成します。

「autoreconf -i」は、インストールされた GNU autotools からファイルを AC_CONFIG_AUX_DIR にコピーします。この場合は、おそらく ltmain.sh です。

于 2011-10-11T19:42:57.557 に答える
0

ユーザーはautoreconfを実行しないでください。ldav1sが指摘しているように(+1)、ボックスにインストールされているautotoolsは、tarballの生成に使用されるツールと一致しません。パッケージをビルドするために何らかの形でautoconfを実行することをユーザーに推奨する(または要求する)多くのパッケージが実際にあります。それらのパッケージは壊れています。適切にビルドされたパッケージは、autotoolsがインストールされていないマシンでビルドする必要があります。パッケージのメンテナでない限り、おそらくアンインストールするだけです。IMO、デフォルトのインストールに含めるべきではありません。

autotoolsのビルドが必要なパッケージを使用している場合は、バグとしてパッケージメンテナに報告してください。バージョン管理システム(git、hg、svnなど)が配布メカニズムとして使用されている場合は、autotoolsを実行してパッケージをビルドするか、パッケージにautotoolsで生成されたファイルをリポジトリに含める必要があります。これが、autotoolsを使用するパッケージの配布ツールとしてバージョン管理システムを使用すべきではない理由です。

于 2011-10-13T12:52:18.747 に答える