无法编译ruby扩展:您选择的CPU不支持x86-64指令集

莫文

我无法使用RVM和ruby 2.3.0(2.2.1相同)编译ruby扩展,并显示以下消息:city.cc:1:0:错误:您选择的CPU不支持x86-64指令集在64位CPU上使用x86_64 Debian Wheezy,x86_64 ruby​​和gcc。尽管如此,似乎红宝石使用-march=native会产生问题。我不知道如何解决此问题。

详情如下:

编译示例扩展:

gem install cityhash
Building native extensions.  This could take a while...
ERROR:  Error installing cityhash:
    ERROR: Failed to build gem native extension.

current directory: /usr/local/rvm/gems/ruby-2.3.0/gems/cityhash-0.8.1/ext/cityhash
/usr/local/rvm/rubies/ruby-2.3.0/bin/ruby -r  ./siteconf20160317-15208-1shn16g.rb extconf.rb
creating Makefile

current directory: /usr/local/rvm/gems/ruby-2.3.0/gems/cityhash-0.8.1/ext/cityhash
make "DESTDIR=" clean

current directory: /usr/local/rvm/gems/ruby-2.3.0/gems/cityhash-0.8.1/ext/cityhash
make "DESTDIR="
compiling city.cc
cc1plus: warning: command line option ‘-Wdeclaration-after-statement’ is valid for C/ObjC but not for C++ [enabled by default]
cc1plus: warning: command line option ‘-Wimplicit-function-declaration’ is valid for C/ObjC but not for C++ [enabled by default]
city.cc:1:0: error: CPU you selected does not support x86-64 instruction set
make: *** [city.o] Błąd 1

make failed, exit code 2

Gem files will remain installed in /usr/local/rvm/gems/ruby-2.3.0/gems/cityhash-0.8.1 for inspection.
Results logged to /usr/local/rvm/gems/ruby-2.3.0/extensions/x86_64-linux/2.3.0/cityhash-0.8.1/gem_make.out

生成文件正在尝试运行以下命令:

$ make -n
echo compiling city.cc
g++ -I. -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-linux -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.   -g -O3 -Wall -march=native -fPIC -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat  -o city.o -c city.cc
echo compiling cityhash.cc
g++ -I. -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-linux -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/usr/local/rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.   -g -O3 -Wall -march=native -fPIC -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat  -o cityhash.o -c cityhash.cc
echo linking shared-object cityhash/cityhash.so 
rm -f cityhash.so
g++ -shared -o cityhash.so city.o cityhash.o -L. -L/usr/local/rvm/rubies/ruby-2.3.0/lib -Wl,-R/usr/local/rvm/rubies/ruby-2.3.0/lib -L. -fstack-protector -rdynamic -Wl,-export-dynamic    -Wl,-R/usr/local/rvm/rubies/ruby-2.3.0/lib -L/usr/local/rvm/rubies/ruby-2.3.0/lib -lruby  -lpthread -lrt -ldl -lcrypt -lm   -lc

uname,ruby,gcc版本-似乎都是64位的:

$ uname -a
Linux bukwica-prod 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u6 x86_64 GNU/Linux
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5) 

..虽然我不知道为什么-match = native我得到pentium-m

$ gcc -march=native -Q --help=target |grep march
-march=                             pentium-m

我没有主意,请帮忙!

大卫·KJ

它是在gem中显式设置的(错误地)

%w{g O3 Wall march=native}.each do |flag|
  flag = "-#{flag}"
  $CPPFLAGS += " #{flag}" unless $CPPFLAGS.split.include? flag
end

应该:

%w{g O3 Wall march}.each do |flag|
  flag = "-#{flag}"
  $CPPFLAGS += " #{flag}" unless $CPPFLAGS.split.include? flag
end

这个拉取请求会更新以完全消除行军,但是它确实很老,所以不要指望那里有什么变化。

您可以通过bundle将其放在您的位置来覆盖哪里提取宝石Gemfile

gem 'cityhash', :git => 'git://github.com/lyfeyaj/cityhash.git'

这将安装包含拉取请求的分叉版本

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法编译ruby扩展:您选择的CPU不支持x86-64指令集

来自分类Dev

您选择的CPU不支持x86-64指令集

来自分类Dev

点安装-您选择的CPU不支持x86-64指令集

来自分类Dev

编译C文件时出现不受支持的x86-64指令集错误

来自分类Dev

为什么80x87指令集使用“基于堆栈”的设计?

来自分类Dev

x86和x64共享指令集?

来自分类Dev

“ cqo”,“ cdq”和“ cwd” x86_64指令。为什么不只使用cqo?

来自分类Dev

长度更改前缀(LCP)是否在简单的x86_64指令上引起停顿?

来自分类Dev

mwait x86指令不等待DMA

来自分类Dev

mwait x86指令不等待DMA

来自分类Dev

x64指令编码(r / m,reg与reg,r / m)

来自分类Dev

列出 GAS 中支持的指令集?

来自分类Dev

编译器和指令集

来自分类Dev

x86指令编码如何选择操作码

来自分类Dev

如何在ARMv8-a上启用Aarch32指令集?

来自分类Dev

在8086指令集中使用ASSUME指令

来自分类Dev

跳过未知的操作码:66,而不是8086指令-尚不支持

来自分类Dev

您如何测试调用服务的Angular 2指令?

来自分类Dev

用于添加新的GNU汇编程序x86指令并重新编译的源代码

来自分类Dev

Angular 2指令现在可以“扩展”吗?

来自分类Dev

如果x86-64中没有兼容模式开关,是否保证不会遇到非64位指令?

来自分类Dev

X86指令以实模式关闭计算机电源?

来自分类Dev

JS和JL x86指令之间的区别

来自分类Dev

此x86指令中发生了什么?

来自分类Dev

LLVM IR和x86指令之间的映射

来自分类Dev

C:将x86指令放入数组并执行

来自分类Dev

如何检测与SSE4指令集的二进制兼容性?

来自分类Dev

我可以在vimrc中检测指令集架构吗?(ARM与x86)

来自分类Dev

我可以映射到可搜索字符设备`/ dev / mem_8`并使用x86_64指令对其进行访问吗?

Related 相关文章

  1. 1

    无法编译ruby扩展:您选择的CPU不支持x86-64指令集

  2. 2

    您选择的CPU不支持x86-64指令集

  3. 3

    点安装-您选择的CPU不支持x86-64指令集

  4. 4

    编译C文件时出现不受支持的x86-64指令集错误

  5. 5

    为什么80x87指令集使用“基于堆栈”的设计?

  6. 6

    x86和x64共享指令集?

  7. 7

    “ cqo”,“ cdq”和“ cwd” x86_64指令。为什么不只使用cqo?

  8. 8

    长度更改前缀(LCP)是否在简单的x86_64指令上引起停顿?

  9. 9

    mwait x86指令不等待DMA

  10. 10

    mwait x86指令不等待DMA

  11. 11

    x64指令编码(r / m,reg与reg,r / m)

  12. 12

    列出 GAS 中支持的指令集?

  13. 13

    编译器和指令集

  14. 14

    x86指令编码如何选择操作码

  15. 15

    如何在ARMv8-a上启用Aarch32指令集?

  16. 16

    在8086指令集中使用ASSUME指令

  17. 17

    跳过未知的操作码:66,而不是8086指令-尚不支持

  18. 18

    您如何测试调用服务的Angular 2指令?

  19. 19

    用于添加新的GNU汇编程序x86指令并重新编译的源代码

  20. 20

    Angular 2指令现在可以“扩展”吗?

  21. 21

    如果x86-64中没有兼容模式开关,是否保证不会遇到非64位指令?

  22. 22

    X86指令以实模式关闭计算机电源?

  23. 23

    JS和JL x86指令之间的区别

  24. 24

    此x86指令中发生了什么?

  25. 25

    LLVM IR和x86指令之间的映射

  26. 26

    C:将x86指令放入数组并执行

  27. 27

    如何检测与SSE4指令集的二进制兼容性?

  28. 28

    我可以在vimrc中检测指令集架构吗?(ARM与x86)

  29. 29

    我可以映射到可搜索字符设备`/ dev / mem_8`并使用x86_64指令对其进行访问吗?

热门标签

归档