2013-04-20 68 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