LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2259|回复: 30

我编译LFS的过程(问题及我能找到的解决方法)

[复制链接]
发表于 2005-12-15 17:49:14 | 显示全部楼层 |阅读模式
编译 glibc时候出现这个

  1. /mnt/lfs/tools/bin/../lib/gcc/i686-pc-linux-gnu/4.2.0/include/mmintrin.h:382: error: can't convert between vector values of different size
  2. make[2]: *** [/mnt/lfs/sources/glibc-build/elf/tst-alignmod.os] Error 1
  3. make[2]: Leaving directory `/mnt/lfs/sources/cvs/libc/elf'
  4. make[1]: *** [elf/subdir_lib] Error 2
  5. make[1]: Leaving directory `/mnt/lfs/sources/cvs/libc'
  6. make: *** [all] Error 2
复制代码



  1. /* Add the 64-bit values in M1 to the 64-bit values in M2.  */
  2. static __inline __m64 __attribute__((__always_inline__))
  3. _mm_sub_si64 (__m64 __m1, __m64 __m2)
  4. {
  5.   return (__m64) __builtin_ia32_psubq ((long long)__m1, (long long)__m2);
  6. }
复制代码


请问这个问题怎么解决
这个是那个文件中相关行数
 楼主| 发表于 2005-12-15 20:06:22 | 显示全部楼层
没办法
自给问题自己解
这个补丁适合cvs版本或20051212的

  1. This fixes the 32-bit x86 MMX testsuite failures.

  2. Bootstrapped and tested on i686-pc-linux-gnu.

  3. 2005-12-09  Jan Beulich  <jbeulich@novell.com>

  4.         * config/i386/mmintrin.m (_mm_add_si64, _mm_sub_si64): Conditionalize
  5.         upon __SSE2__.

  6. --- /home/jbeulich/src/gcc/trunk/2005-12-07/gcc/config/i386/mmintrin.h        2005-12-01 10:48:33.000000000 +0100
  7. +++ 2005-12-07/gcc/config/i386/mmintrin.h        2005-12-08 09:21:32.424278560 +0100
  8. @@ -273,12 +273,14 @@ _m_paddd (__m64 __m1, __m64 __m2)
  9.    return _mm_add_pi32 (__m1, __m2);
  10. }

  11. +#ifdef __SSE2__
  12. /* Add the 64-bit values in M1 to the 64-bit values in M2.  */
  13. static __inline __m64 __attribute__((__always_inline__))
  14. _mm_add_si64 (__m64 __m1, __m64 __m2)
  15. {
  16.    return (__m64) __builtin_ia32_paddq ((long long)__m1, (long long)__m2);
  17. }
  18. +#endif

  19. /* Add the 8-bit values in M1 to the 8-bit values in M2 using signed
  20.     saturated arithmetic.  */
  21. @@ -375,12 +377,14 @@ _m_psubd (__m64 __m1, __m64 __m2)
  22.    return _mm_sub_pi32 (__m1, __m2);
  23. }

  24. +#ifdef __SSE2__
  25. /* Add the 64-bit values in M1 to the 64-bit values in M2.  */
  26. static __inline __m64 __attribute__((__always_inline__))
  27. _mm_sub_si64 (__m64 __m1, __m64 __m2)
  28. {
  29.    return (__m64) __builtin_ia32_psubq ((long long)__m1, (long long)__m2);
  30. }
  31. +#endif

  32. /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using signed
  33.     saturating arithmetic.  */

复制代码
回复 支持 反对

使用道具 举报

发表于 2005-12-15 22:29:11 | 显示全部楼层
真新。。。。:)。。。谢谢分享结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-15 23:07:50 | 显示全部楼层
那句广告词怎么说的
“不走寻常路”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-15 23:22:10 | 显示全部楼层
Book上说

  1. 如果你把这个包缺省的优化参数(包括 -march 和 -mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGS 和 CXXFLAGS,我们劝你在编译 GCC 时 unset 或修改它们。
复制代码

我没有按照这个做。。增加了适合我机器的项目
-march=pentium4 -pipe -fomit-frame-pointer -mmmx -msse -msse2 -mfpmath=sse,387
感觉还可以,glibc gcc都可以通过
(Glibc遇到了一点小问题,稍后我再次编译时候附上解决方案)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-15 23:55:59 | 显示全部楼层
在编译 GCC时候发现需要额外的两个小东西
一个是 autogen 测试时候用
另外一个是 gperf 。。这个忘记哪里需要了。。反正是需要
回复 支持 反对

使用道具 举报

发表于 2005-12-16 00:29:44 | 显示全部楼层
autogen 是在第二次运行make test的时候用的,第一次似乎不需要。(我以前也发现了,并且汇报给了LFS maillist,但是似乎没有得到回复。)

gperf,我不知道。

不过两者似乎都不影响LFS进程。
回复 支持 反对

使用道具 举报

发表于 2005-12-16 00:47:15 | 显示全部楼层
小心优化!有时glibc的问题到后面才能反映出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-16 01:04:44 | 显示全部楼层
gperf的确要用到,记得是glibc上面用。。。

另外我一直在用 make -j5这个方法,应该没有问题吧?

再就是觉得用i386这个标准来编译好像很浪费的样子,为何支持的技术不去利用
那当时买支持sse或HT的cpu不就没有用处了?
回复 支持 反对

使用道具 举报

发表于 2005-12-16 05:47:41 | 显示全部楼层
能优化当然好,就是怕过度优化造成后边编译失败就前功尽弃了。

其他的,没有什么。我觉得是否优化,效果不是非常大,心理作用而已。

至于HT这类,我觉得不是gcc能优化的,应该从内核配置入手。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表