随笔-0  评论-0  文章-40  trackbacks-0
Ubuntu 10.04那边编译下来没什么问题很顺利,但是Lion上问题多多,首先是因为Lion自己(或者23.3a自己, whatever...)的问题导致编译有问题,然后是编译完成的版本没有窗口外框,无法拖动和管理,就像Compiz下有时候丢失了窗口管理器一样。花了我几个小时上网查找资料什么的,因此过程记录在下面,方便其他在lion上编译Emacs23.3的朋友们。

环境: Mac OS X lion (10.7.2) + XCode 4.2 + emacs-23.3a
我在第一次编译成功时没有使用附加的图像文件格式库,目前来看没什么影响,Emacs的文档里也给出列具体的地址,需要的朋友没可以自己去编译安装,然后去掉 configure中对应的配置即可
配置 :../emacs-23.3/configure --with-ns --with-png=no --with-jpeg=no --with-gif=no --with-tiff=no
--with-ns: 编译位nextstep(也就是MacOsX的前身啦  :-) )
编译:  make bootstrap && make && make install 
安装: 进行编译的目录下面有Emacs.app,复制到/Application目录即可

 OK Let's ROCK!

<----------------------------------- Next -------------------------------------->
Bug#8223: (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8223)
......................
x7fcaeb5fc080 (sz:   0x3f2d/  0x3f30)
0x7fcaeb500000 (sz:  0xfc080/ 0xfc080)
0x7fcaef1fc080 (sz:   0x3f2c/  0x3f30)
0x7fcaef100000 (sz:   0x1765/ 0xfc080)
0x7fcaeb4fc080 (sz:   0x3f2d/  0x3f30)
0x7fcaeb400000 (sz:  0xfc080/ 0xfc080)
0x7fcaed7f8000 (sz:   0x389e/  0x7fa8)
0x7fcaed000000 (sz: 0x3873ff/0x7f8000)
0x7fcaec7f8000 (sz:   0x7fa8/  0x7fa8)
0x7fcaec000000 (sz: 0x7f7fff/0x7f8000)
0x7fcaf0ff8000 (sz:    0x2b2/  0x7fa8)
0x7fcaf0800000 (sz:  0x283fe/0x7f8000)
0x7fcaf07f8000 (sz:     0xa8/  0x7fa8)
0x7fcaf0000000 (sz:   0x6fc1/0x7f8000)
0x7fcaefff8000 (sz:    0x11e/  0x7fa8)
0x7fcaef800000 (sz:   0xf3ff/0x7f8000)
0x10614b000 (sz:        0/  0x1000)
--- Load Commands written to Output File ---
Writing segment __PAGEZERO       @        0 (       0/0x100000000 @          0)
Writing segment __TEXT           @        0 (0x1d4000/0x1d4000 @ 0x100000000)
Writing segment __DATA           @ 0x1d4000 (0x367000/0x367000 @ 0x1001d4000)
        section __program_vars   at 0x1d4000 - 0x1d4028 (sz:     0x28)
        section __nl_symbol_ptr  at 0x1d4028 - 0x1d4038 (sz:     0x10)
unexec: unrecognized section name in __DATA segment
make[2]: *** [bootstrap-emacs] Error 1
make[1]: *** [src] Error 2
make: *** [bootstrap] Error 2
................

根据在官方maillist中查到的结果,这是由于 src/unexmacosx.c文件中, copy_data_segment()函数中没有对名称为__got的区段进行判断导致出错,自行修改下代码复制这个区段即可。
src/unexmacosx.c line 828
+ || strncmp (sectp->sectname, "__got", 16) == 0

<----------------------------------- Next -------------------------------------->
Bug#8395(http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8395)
....................
0x7f94a6afc080 (sz:   0x3f2c/  0x3f30)
0x7f94a6a00000 (sz:   0x1d85/ 0xfc080)
0x7f94a40fc080 (sz:   0x3f2d/  0x3f30)
0x7f94a4000000 (sz:  0xfc07f/ 0xfc080)
0x7f94a2dfc080 (sz:   0x3f2d/  0x3f30)
0x7f94a2d00000 (sz:  0xfc080/ 0xfc080)
0x7f94a69fc080 (sz:   0x3f2c/  0x3f30)
0x7f94a6900000 (sz:    0xc7f/ 0xfc080)
0x7f94a2cfc080 (sz:   0x3f2d/  0x3f30)
0x7f94a2c00000 (sz:  0xfc080/ 0xfc080)
0x7f94a2efc080 (sz:   0x3f2c/  0x3f30)
0x7f94a2e00000 (sz:  0xfc080/ 0xfc080)
0x7f94a4ff8000 (sz:   0x389e/  0x7fa8)
0x7f94a4800000 (sz: 0x3873ff/0x7f8000)
0x7f94a3ff8000 (sz:   0x7fa8/  0x7fa8)
0x7f94a3800000 (sz: 0x7f7fff/0x7f8000)
0x7f94a87f8000 (sz:    0x270/  0x7fa8)
0x7f94a8000000 (sz:  0x243fe/0x7f8000)
0x7f94a7ff8000 (sz:     0x86/  0x7fa8)
0x7f94a7800000 (sz:   0x4af7/0x7f8000)
0x7f94a77f8000 (sz:     0xa8/  0x7fa8)
0x7f94a7000000 (sz:   0x6fc1/0x7f8000)
0x103467000 (sz:        0/  0x1000)
--- Load Commands written to Output File ---
Writing segment __PAGEZERO      @         0     (       0/0x100000000 @          0)
Writing segment __TEXT           @         0             (0x1d4000/0x1d4000 @ 0x100000000)
Writing segment __DATA           @ 0x1d4000     (0x367000/0x367000 @ 0x1001d4000)
        section __program_vars   at 0x1d4000 - 0x1d4028 (sz:     0x28)
        section __nl_symbol_ptr   at 0x1d4028 - 0x1d4038 (sz:     0x10)
        section __got             at 0x1d4038 - 0x1d41d8 (sz:    0x1a0)
        section __la_symbol_ptr   at 0x1d41d8 - 0x1d4a08 (sz:    0x830)
        section __objc_classlist at 0x1d4a08 - 0x1d4a78 (sz:     0x70)
        section __objc_protolist at 0x1d4a78 - 0x1d4a88 (sz:     0x10)
        section __objc_imageinfo at 0x1d4a88 - 0x1d4a90 (sz:      0x8)
        section __objc_const     at 0x1d4a90 - 0x1d6c60 (sz:   0x21d0)
        section __objc_selrefs   at 0x1d6c60 - 0x1d7a98 (sz:    0xe38)
        section __objc_msgrefs   at 0x1d7aa0 - 0x1d7b90 (sz:     0xf0)
        section __objc_classrefs at 0x1d7b90 - 0x1d7d80 (sz:    0x1f0)
        section __objc_superrefs at 0x1d7d80 - 0x1d7de0 (sz:     0x60)
        section __objc_data       at 0x1d7de0 - 0x1d8240 (sz:    0x460) 
unexec: cannot write section __data
make[2]: *** [bootstrap-emacs] Error 1
make[1]: *** [src] Error 2
make: *** [bootstrap] Error 2
....................

根据在官方maillist中查到的结果,似乎是要求gcc在lion上禁止地址空间随机化功能,我不是很确定具体原因是否如此,读完maillist也暂时无解。MachObje的一点资料(http://hackage.haskell.org/packages/archive/macho/0.22/doc/html/Data-Macho.html). 
对于23.3 Release的修正方法: 
src/s/darwin.h Line 184
-  #define LD_SWITCH_SYSTEM_TEMACS -prebind LIBS_NSGUI -Xlinker -headerpad -Xlinker HEADERPAD_EXTRA
+ #define LD_SWITCH_SYSTEM_TEMACS -prebind LIBS_NSGUI -Xlinker -headerpad -Xlinker HEADERPAD_EXTRA -fno-pie

<----------------------------------- Next -------------------------------------->

至此编译上没有什么问题了,但是编译出来的Emacs还是没法用,没有标题栏,没法最大最小化,没法移动,而且位置出现在最左上角,很挫很受伤啊.....解决这个问题需要另一个Patch, 我在官方的bugtrace上没搜到patch, 而是在 MacPort上找到了patch.. (https://trac.macports.org/attachment/ticket/30268/patch-fix-title-bar.diff)
src/nsterm.m Line 5109
styleMask: (NSResizableWindowMask |
+ styleMask: (NSTitledWindowMask | 
NSResizableWindowMask | 

<----------------------------------- Next -------------------------------------->

最后将编译出来的Emacs.App文件夹复制到 /Application 中即可,希望对诸位有帮助,吃午饭去了,88 :-)


posted on 2011-11-20 12:37 无毁湖光 阅读(80) 评论(0)  编辑 收藏 引用