# LDFLAG -Wl,-O1 在编译emacs时报错啊(gcc3.4.3)

## tecehux

LDFLAG -Wl,-O1 在编译emacs时报错啊！

用的是gcc3.4.3

```
gcc -nostdlib `./prefix-args -Xlinker  -z nocombreloc -Wl,-O1 ` -o temacs pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o dispnew.o frame.o scroll.o xdisp.o xmenu.o window.o charset.o coding.o category.o ccl.o cm.o term.o xfaces.o xterm.o xfns.o xselect.o xrdb.o fontset.o emacs.o keyboard.o macros.o keymap.o sysdep.o buffer.o filelock.o insdel.o marker.o minibuf.o fileio.o dired.o filemode.o cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o alloc.o data.o doc.o editfns.o callint.o eval.o floatfns.o fns.o print.o lread.o abbrev.o syntax.o unexelf.o mocklisp.o bytecode.o process.o callproc.o region-cache.o sound.o atimer.o doprnt.o strftime.o intervals.o textprop.o composite.o md5.o  terminfo.o lastfile.o vm-limit.o  widget.o    ../lwlib/liblw.a  -lXm -lXpm -lXp -lXmu -lXt -lSM -lICE -lXext -ltiff -ljpeg -lpng -lz -lm -lungif -lXpm -lX11  -lncurses   -lm -lgcc -lc -lgcc /usr/lib/crtn.o

/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../i686-pc-linux-gnu/bin/ld: unrecognized option '-Wl,-O1'

/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../i686-pc-linux-gnu/bin/ld: use the --help option for usage information

collect2: ld returned 1 exit status

make[1]: *** [temacs] 错误 1

make[1]: *** 正在等待未完成的任务....

```

----------

## akar

你的這個貼發到了 让你的 Gentoo 快若刀锋，但好像不對題！

對了， 前天測試 distccd， emerge 了一下， 我還用了 USE="-motif"，沒有發生問題。

請問為什麼要用

 *Quote:*   

> LDFLAG -Wl,-O1 

 

----------

## BlueSand

对emacs的编译最好不要用优化参数，很容易就出错。

再者，emacs的强大之处主要还是在lisp，优化底层的c的作用也不是特别大。

----------

## tecehux

 *akar wrote:*   

> 你的這個貼發到了 让你的 Gentoo 快若刀锋，但好像不對題！
> 
> 

 

是因为我按着EricHsu的方法把这个ldflag加到make.conf里了，编译时却出错，只好放弃不用了。

在gentoo里还有类似package.use的文件可以单独设定每个portage的ldflag和cflag么？

----------

## akar

 *tecehux wrote:*   

>  *akar wrote:*   你的這個貼發到了 让你的 Gentoo 快若刀锋，但好像不對題！
> 
>  
> 
> 是因为我按着EricHsu的方法把这个ldflag加到make.conf里了，编译时却出错，只好放弃不用了。

 

原來如此！ 不好意思，錯怪了你！

也許要請 Eric，再在make.conf 的编译优化参数下，再加一行 敬告。

謝謝 BlueSand提醒。

 :Smile: 

----------

## BlueSand

LDFLAGS是用来制定动态Library调用的参数集，加入make.conf会提高程序的速度，不过也增加了链接出错的可能性。 :Razz: 

不过我暂时没有遇到过，除了emacs， :Sad: 

更多的内容可以参考https://forums.gentoo.org/viewtopic.php?t=67777&highlight=ldflags

----------

## EricHsu

 *akar wrote:*   

> 
> 
> 也許要請 Eric，再在make.conf 的编译优化参数下，再加一行 敬告。
> 
> 

 

to akar:

敬告嘛, 其实文章一开始就有哦, 仔细看看... 虽然不是具体针对 LDFLAGS  :Wink:  我今晚加上!

to tecehux, 

有些功能强大的软件对于一些优化参数反而显得 "脆弱", 我知道的有 OOo, xine-libs, xorg.. 都不宜在编译它们时使用过多的优化参数, 现在知道多一个 emacs 也不行  :Wink: 

以目前经验而言, 我用的软件都可以在更为优化的 CFLAGS, LDFLAGS 下编译, 所以, 大部分软件还是可以放心这么编译的. 遇到这些不能优化的, 那就:

```

# CFLAGS="" LDFLAGS="" emerge [pkg]

```

----------

## tecehux

 *EricHsu wrote:*   

> 
> 
> 以目前经验而言, 我用的软件都可以在更为优化的 CFLAGS, LDFLAGS 下编译, 所以, 大部分软件还是可以放心这么编译的. 遇到这些不能优化的, 那就:
> 
> ```
> ...

 

噢，我是晚上睡觉前emerge -e system，醒来一看，就出了这个错。

记不得是哪里看到的那个emerge -e system && emerge -e system && emerge -e world && emerge -e world，实在是阴险啊！  :Exclamation: 

----------

## EricHsu

 *tecehux wrote:*   

> 
> 
> 噢，我是晚上睡觉前emerge -e system，醒来一看，就出了这个错。
> 
> 记不得是哪里看到的那个emerge -e system && emerge -e system && emerge -e world && emerge -e world，实在是阴险啊！ 

 

别这么说啊, 这个命令无非就是:

 假设 system 中什么都没装 (-e = emptytree), 然后重建整个 system

 以重建的 system, 再次假设 system 中什么都没装, 再重建

 假设 world 中什么都没装, 重建之

 以重建后的 world, 再次假设 world 中什么都没装, 再重建

这样就可以 "彻底" 重建整个系统.

之所以要每个命令来两次, 道理很简单, 比如你第一次 emerge -e system 时, 之前的系统可能是拿 -O3 build 的, 这时, 你就是拿 -O3 build 出来的系统来重建系统 (比如你想改成 -O2 了); 然后再运行一次 emerge -e system, 就是拿 -O2 build 出来的系统再 build 一个 -O2 的. 也就够 "彻底" 了, 呵呵

----------

## tecehux

 *EricHsu wrote:*   

> 
> 
> 别这么说啊, 这个命令无非就是:
> 
>  假设 system 中什么都没装 (-e = emptytree), 然后重建整个 system
> ...

 

理论上是没错，可实际运行起来就不是说的这么简单了。我估计就我的机子，怎么也要四五天能整个装完！

而时间长也倒不是什么错，怕就怕出错，一个程序编译出错，就全都挂在那里了。倘若只是改个use之类也好办，就怕中间不得不来个其它的emerge。好了，emerge --resume是不成了，要么就重新开始，要么就手动找上回剩下的列个表继续吧。装下来可麻烦的要命。

最最关键的是：我不知道这么弄出来的系统到底快了多少！

谁想这么弄的话可真要事前三思啊！

----------

## EricHsu

 *tecehux wrote:*   

> 
> 
> 理论上是没错，可实际运行起来就不是说的这么简单了。我估计就我的机子，怎么也要四五天能整个装完！
> 
> 而时间长也倒不是什么错，怕就怕出错，一个程序编译出错，就全都挂在那里了。
> ...

 

呵呵, 理解理解! 确实, 如果在初装系统时, bootstrap/emerge system 出错了, 解决之后, 继续就可以. 但是 emerge -e 则出错了就还是得从头来呀...

至于系统性能的变化, 我觉得还是得自己卯着劲 - 比如重建之前测一次性能, 重建之后测一次... 要解决问题/学到东西/得到结论都是需要有所付出的  :Wink: 

----------

## tecehux

 *EricHsu wrote:*   

> 
> 
> 至于系统性能的变化, 我觉得还是得自己卯着劲 - 比如重建之前测一次性能, 重建之后测一次... 要解决问题/学到东西/得到结论都是需要有所付出的 

 

测是怎么测的？介绍一下  :Razz: 

----------

## EricHsu

 *tecehux wrote:*   

> 
> 
> 测是怎么测的？介绍一下 

 

这个帖子提供了不少信息, 不妨参考一下  :Wink: 

Edit: 还有这个帖子. 找到好用的法子记得回来告诉我一声, 我也想测测俺家这台老牛机器能跑多快  :Laughing: 

----------

## blackwhite

 *BlueSand wrote:*   

> LDFLAGS是用来制定动态Library调用的参数集，加入make.conf会提高程序的速度，不过也增加了链接出错的可能性。
> 
> 不过我暂时没有遇到过，除了emacs，
> 
> 更多的内容可以参考https://forums.gentoo.org/viewtopic.php?t=67777&highlight=ldflags

 

有好几个程序。emerge gnome的时候就有个程序不可以用这个参数优化。基本上常用的程序我都编译过。后来我就把这个优化个给去掉了。

----------

