2

からemacs 22.3をダウンロードしました

http://ftp.gnu.org/pub/gnu/emacs/emacs-22.3.tar.gz

私のUbuntu 12.04.2 LTSデスクトップに、コンパイル/メイクが機能しません。

構成はうまくいくようです。

Make は非常に早い段階で失敗します。サブディレクトリ lib-src では、makefile の 148 行目に問題があります。そして、それは問題のように見えます:

ALL_CFLAGS = -D_BSD_SOURCE -DHAVE_CONFIG_H
          -I. -I../src -I${srcdir} -I${srcdir}/../src ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}

それが 147 行目と 148 行目です。148 行目は 147 行目の続きであると思われます。タブから始まります。147 行の末尾に \ がありません。1 つ入れて、もう一度試しました。150 行目でエラーが発生しました。別の \ を挿入しました。数行後、事態はもう少し深刻になりました。\ がないと、実際には構文エラーではなく、より微妙な方法で make break が発生する結果になりました。

とにかく、私は Makefile を編集すべきではありません (私は、それらのパーミッションが読み取り専用だったことを知っています ;-) )。私は何を間違っていますか?私は辛抱することができましたが、代わりに、たとえばフラグをフィードして、たとえば emacs-22.3-makefile-compatibility モードで実行することができれば、はるかに優れています。

[「なぜ」と疑問に思っている人のために -- 仕事に必要なスクリプトがいくつかありますが、それらは emacs >=23; では一度も動作しませんでした。私の古いマシンでは問題なくemacs22を自分でコンパイルしましたが、この新しいUbuntuマシンではemacs22がなく、ubuntu 12.04リポジトリにemacs22がないので、少し必死です]


OKだったので、試してみることをお勧めしました

$ CPPFLAGS="-P" ./configure

これにより、lib-src の改行/タブに関するすべての問題が整理されます。しかし、実際には、手動で取得できたところまでたどり着きました。

cd src; make all  \
          CC='gcc' CFLAGS='-g -O2 -Wno-pointer-sign ' CPPFLAGS='-D_BSD_SOURCE  -P' \
          LDFLAGS='-Wl,-znocombreloc' MAKE='make'
make[1]: Entering directory `/home/buzzard/local/emacs-22.3/src'
gcc -c -D_BSD_SOURCE  -P -Demacs -DHAVE_CONFIG_H   -I. -I/home/buzzard/local/emacs-22.3/src -D_BSD_SOURCE  -g -O2 -Wno-pointer-sign  pre-crt0.c
make[1]: *** No rule to make target `/usr/lib/crt1.o', needed by `temacs'. Stop.
make[1]: Leaving directory `/home/buzzard/local/emacs-22.3/src'
make: *** [src] Error 2

うーん...自分が何をしているか知っていれば、他のビットとボブを投稿しますが、正直に言うと、make を理解したことがありません。私はいつもそれがうまくいくことを望んでいました...

4

1 に答える 1

4

これは、新しい gcc バージョンの問題です。これを修正した Emacs リポジトリのこの変更を参照してください。

http://git.savannah.gnu.org/gitweb/?p=emacs.git;a=commit;h=16abbbf

を使用して問題を回避できるはずです

CPPFLAGS="-P" ./configure

/usr/lib/crt1.o が見つからないという問題を回避するには、編集する必要がありますsrc/Makefile(最初に編集する必要がある場合がありますchmod a+rw src/Makefile)。新しいシステムでは、crt1.o は in では/usr/libなく に/usr/lib/<arch directory>/あるため、たとえば in にある可能性があります/usr/lib/i386-linux-gnu(あなたのものは異なる場合があります!)。次に でsrc/Makefile、行を変更します

STARTFILES = pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o

STARTFILES = pre-crt0.o /usr/lib/i386-linux-gnu/crt1.o /usr/lib/i386-linux-gnu/crti.o

LIBES = ... all kinds of stuff ...  /usr/lib/crtn.o $(GNULIB_VAR)

LIBES = ... all kinds of stuff ... /usr/lib/i386-linux-gnu/crtn.o $(GNULIB_VAR)

繰り返しますが、ディレクトリは異なる場合があります。

于 2013-04-20T20:38:41.677 に答える