Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置gcc和g++;优化标志永久存在_Gcc_Compiler Optimization - Fatal编程技术网

设置gcc和g++;优化标志永久存在

设置gcc和g++;优化标志永久存在,gcc,compiler-optimization,Gcc,Compiler Optimization,我正在x64机器上运行x86内核。我想为i586处理器编译库。在编译过程中,一些库使用i686优化,因此希望为所有库设置-mtunes=i586、-march=i586和-O3标志,即使它们在其makefile中显式声明了其他内容 不知何故,我想永久设置编译器标志 不管你是否应该这样做,这里有最简单的方法: 创建包含以下内容的新文件: #!/bin/sh exec /usr/bin/gcc "$@" -O3 -mtunes=i586 -march=i586 如果在系统中不正确,请将/usr/

我正在x64机器上运行x86内核。我想为i586处理器编译库。在编译过程中,一些库使用i686优化,因此希望为所有库设置
-mtunes=i586
-march=i586
-O3
标志,即使它们在其makefile中显式声明了其他内容

不知何故,我想永久设置编译器标志

不管你是否应该这样做,这里有最简单的方法:

  • 创建包含以下内容的新文件:

    #!/bin/sh
    
    exec /usr/bin/gcc "$@" -O3 -mtunes=i586 -march=i586
    
    如果在系统中不正确,请将/usr/bin/gcc更改为实际的编译器

  • 将其另存为
    ~/bin/gcc

  • 使新脚本可执行:

    chmod+x~/bin/gcc

  • 重复此步骤为g++创建另一个文件

  • ~/bin
    添加到路径的开始部分

    export PATH=~/bin:$PATH
    
  • 编译你的项目。只要新脚本在路径上,它们就会覆盖makefile所说的任何内容

  • 希望有帮助


    另外,最好的方法(而不是最简单的方法)可能是弄乱编译器的“specs”文件,但这更难解释和执行。

    这听起来不是一件很好的事情。。。如果一个makefile明确指定了特定的标志,这可能是有原因的。如果Makefiles试图将
    -O3
    更改为
    -O2
    ,因为代码不能与
    -O3
    一起工作,那么您想如何处理这些Makefiles?@OliCharlesworth:我正在为rb-110 x86嵌入式主板编译openCV。在micro SD卡上安装debian,我在PC上运行它。但在编译东西时,二进制文件是i686。我正在寻找一种方法来强迫它们成为i586,当然是进行优化。@hvd:我有一个非常非常弱的处理器,试图优化一切。你确定
    -O3
    不能工作吗?@SorushRabiee:是的,在某些版本的GCC上,某些包可能会使用
    -O3
    破坏(有时非常微妙)<代码>-Os可能也更适合较弱的CPU。