【问题标题】:How to fix error: bad value (native) for -march= switch and -mtune= switch?如何修复错误:-march= 开关和 -mtune= 开关的错误值(本机)?
【发布时间】:2012-12-04 07:49:31
【问题描述】:

我正在编译这里提供的库:http://www.robots.ox.ac.uk/~vgg/software/fastann/,但是

bash-3.2$ PREFIX=/usr/local/ cmake . && make                                    
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
 -Wall -O2 -g3 -msse2 -march=native -fno-exceptions -fno-rtti
--- Prefix = /usr/local/
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/dir
[ 14%] Building CXX object CMakeFiles/fastann.dir/dist_l2.cpp.o
/path/to/dir/dist_l2.cpp:1: error: bad value (native) for -march= switch
/path/to/dir/dist_l2.cpp:1: error: bad value (native) for -mtune= switch
make[2]: *** [CMakeFiles/fastann.dir/dist_l2.cpp.o] Error 1
make[1]: *** [CMakeFiles/fastann.dir/all] Error 2
make: *** [all] Error 2
bash-3.2$

这只是提供的说明中的第一步,我不知道下一步该往哪里看。谁能告诉我这个错误到底是什么,以及如何解决它?

【问题讨论】:

  • gcc 的哪个版本会发生这种情况?
  • Error: bad value for -march= switch 的可能重复项。
  • @alk - GCC 4.1.x。由于 CentOS 5,您仍然可以在野外体验它。

标签: linux gcc compiler-errors makefile cmake


【解决方案1】:

切换到使用等于或大于 4.2 的 gcc 版本。

gcc的4.2版引入了native三月。


使用

gcc --version

获取gcc的版本信息。

【讨论】:

  • 他无法在某些平台上切换编译器。例如,CentOS 5 使用gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)。我知道的下一个更糟糕的情况是 OpenBSD 和 GCC 4.2.1。 OpenBSD 是现代的 - 但它的编译器在 GCC 4.2.1 中被冻结。
【解决方案2】:

如何修复错误:-march= switch 和 -mtune= switch 的错误值(本机)?

问题在于-march=nartive。根据GCC's mailing list 上的 Ian Lance Taylor 的说法(Ian 是 GCC 开发人员之一):

问题是驱动代码不工作,bug是 gcc 不能正确处理 [-march=native]。 gcc中有一些代码 处理驱动程序代码失败,它适用于-mtune=native,但是 不适用于-march=native

驱动程序代码应该将-march=native 更改为 -march=XXX 用于您的 CPU。代码在 gcc/config/i386/driver-i386.c.

所以解决方法是避免使用-march=native;并使用 (1) -m32-m64,或 (2) 使用 -march=cpu-type,其中 cpu-type 是 GCC 手册的 3.17.15 Intel 386 and AMD x86-64 Options 中列出的其中之一。该列表很广泛,包括pentiumpentium2pentium3pentium4

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多