2013-04-20 65 views
2

我從Emacs的22.3不會編譯在Ubuntu 12.04

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

下載emacs的22.3到我的Ubuntu 12.04.2 LTS桌面和編譯/化妝不起作用。

配置似乎工作正常。

很早就失敗了:在子目錄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結束。我把一個,並再次嘗試。我在第150行發現了一個錯誤。我放入了另一個\。幾行後面的事情變得更加嚴重了,在那裏沒有「實際」導致了那些不是語法錯誤,而是以更微妙的方式實現了突破的事情。

我不應該編輯Makefiles無論如何(我可以告訴,他們的權限是隻讀的;-))。我究竟做錯了什麼?我可以堅持下去,但如果我可以改爲例如喂一面旗子以便例如以emacs-22.3-makefile-compatibility模式運行,那會更好。

[對於那些想知道「爲什麼」 - 我有一些腳本,我需要我的工作,他們從來沒有在emacs> = 23;我的舊機器上的我剛剛編譯emacs22自己沒有問題,但這個新的Ubuntu的機器上我沒有emacs22,有沒有emacs22在Ubuntu 12.04倉庫,所以我有點絕望]


行,所以有人建議我試過

$ 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 

嗯......如果我知道我在做什麼我會發布其他位和羈絆,但說實話我我從來沒有理解過。我一直只希望它能工作...

+0

你需要「cd src」嗎?我通常只是從頂級emacs目錄運行make(我運行configure的同一目錄)。通常它只是「配置」,然後是「make」。 – jtahlborn 2013-04-20 22:59:56

+0

我不知道答案,但您可以嘗試運行'autogen.sh'腳本來重建配置腳本,以防某些不兼容的問題可以自動解決。 – phils 2013-04-21 02:02:12

+0

啊,22.3沒有autogen.sh。您可以從更新的版本中查看腳本以查看它的功能並手動複製它,但這可能會變成一堆沒有實際好處的工作,我猜'INSTALL'文件應該是在任何情況下都是更好的選擇。 – phils 2013-04-21 02:10:26

回答

4

這是一個新的gcc版本的問題。看到Emacs的回購這一變化,這解決了這個問題:

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

您應該能夠通過使用

CPPFLAGS="-P" ./configure 

爲了避免與/usr/lib/crt1.o的問題workaraound問題沒有被發現,你必須編輯src/Makefile(你可能首先必須做chmod a+rw src/Makefile編輯它)。在較新的系統中,crt1.o不在/usr/lib中,而在/usr/lib/<arch directory>/中,因此例如它可能在/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) 

同樣,你的目錄可能會有所不同!

+0

太好了 - 謝謝!現在編譯。 FWIW,在我的Ubuntu 12.04桌面上,它是/usr/lib/x86_64-linux-gnu/crt1.o [請注意其他人閱讀:請注意,上面有三個* i386-linux-gnu實例,因此需要更改到x86_64-linux-gnu]。然後Emacs像往常一樣編譯。尾巴的刺痛是它沒有運行:-)它失敗了「emacs:無法打開termcap數據庫文件」。我通過安裝libncurses5-dev然後完全重新啓動來解決這個問題。所以如果你想編輯你的答案是Ubuntu 12.04的完整解決方案,你可能想在開始時提到這一點。 – 2013-04-21 13:00:11