2016-08-11 44 views
2

我想在Windows Bash(WinBash?Win-Bash?)中編譯emacs-24.4,但是遇到一個問題,Windows似乎啓用了內存保護,從而打破了emacs構建。Windows Bash - Emacs構建失敗:啓用內存保護

後 '讓' 我得到的錯誤時(./configure正常工作)是:

Dumping under the name emacs 
************************************************** 
Warning: Your system has a gap between BSS and the 
heap (25164600 bytes). This usually means that exec-shield 
or something similar is in effect. The dump may 
fail because of this. See the section about 
exec-shield in etc/PROBLEMS for more information. 
************************************************** 
/bin/bash: line 7: 6853 Segmentation fault  (core dumped) ./temacs --batch --load loadup bootstrap 
make[1]: *** [bootstrap-emacs] Error 1 
make[1]: Leaving directory `/home/tdwyer/bin/emacs-24.5_linux_build/src' 
make: *** [src] Error 2 

在etc /問題的文件,相關部分給出了:

*** Segfault during `make bootstrap' under the Linux kernel. 

In Red Hat Linux kernels, "Exec-shield" functionality is enabled by 
default, which creates a different memory layout that can break the 
emacs dumper. Emacs tries to handle this at build time, but if this 
fails, the following instructions may be useful. 

Exec-shield is enabled on your system if 

    cat /proc/sys/kernel/exec-shield 

prints a value other than 0. (Please read your system documentation 
for more details on Exec-shield and associated commands.) 

Additionally, Linux kernel versions since 2.6.12 randomize the virtual 
address space of a process by default. If this feature is enabled on 
your system, then 

    cat /proc/sys/kernel/randomize_va_space 

prints a value other than 0. 

When these features are enabled, building Emacs may segfault during 
the execution of this command: 

    ./temacs --batch --load loadup [dump|bootstrap] 

To work around this problem, you can temporarily disable these 
features while building Emacs. You can do so using the following 
commands (as root). Remember to re-enable them when you are done, 
by echoing the original values back to the files. 

    echo 0 > /proc/sys/kernel/exec-shield 
    echo 0 > /proc/sys/kernel/randomize_va_space 

Or, on x86, you can try using the `setarch' command when running 
temacs, like this: 

    setarch i386 -R ./temacs --batch --load loadup [dump|bootstrap] 

or 

    setarch i386 -R make 

(The -R option disables address space randomization.) 

並不讓人意外,如果我看看它是否啓用..它是:

$ cat /proc/sys/kernel/randomize_va_space 
2 

但不幸的是,我試圖禁用它(甚至運行bash作爲管理員),它失敗:

$ sudo echo 0 > /proc/sys/kernel/randomize_va_space 
bash: /proc/sys/kernel/randomize_va_space: Permission denied 

此外,setarch不使用工作:

setarch x86_84 -R make 

建議?

回答