我可以通过哪些(小)方法修改 Octave 的编译选项来增强它而不破坏它?

我可以通过哪些(小)方法修改 Octave 的编译选项来增强它而不破坏它?

如果这个问题的标题看起来有点模糊,我很抱歉。但我不确定如何将我试图做的事情浓缩成一句话。

几周前,我了解到我可以按照以下步骤在 Ubuntu 12.04 系统上构建和安装最新版本的 Octave。

  1. 安装编译、链接和运行 octave 所需的工具。对于 Ubuntu,以下命令对我有用。

    sudo apt-get build-dep octave3.2
    sudo apt-get install build-essential gnuplot gtk2-engines-pixbuf
    sudo apt-get install libfontconfig-dev bison
    
  2. 接下来,从Octave 的 Gnu 项目档案并将档案解压到系统上的文件夹中。

  3. 使用以下命令来构建、检查和安装 octave。

     ./configure
     make
     make check
     sudo make install
    

不幸的是,上面的代码构建了一个包含所有调试符号表的 Octave。仅目标文件就非常大,占用了大约 1.7 GB。

当前Octave 文档建议

要在不调试符号的情况下进行编译,请尝试以下命令
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
而不仅仅是 make

然而,当我尝试这样做时不是工作。该-g选项仍用于编译。为了好玩,我尝试了一下,./configure CFLAGS=-O CXXFLAGS=-O结果如下做过工作。(构建结果现在占用约 253MB,而不是约 1.7GB)。

我的问题是

  1. 这实际上是用于编译 Octave 而不使用调试符号(即不带-g)的正确(推荐?)方法吗?
  2. 我该如何编译 Octave 以便它使用 x86_64 而不是 x86?
    注意:我不是询问如何编译 Octave 以使用(实验性的)64 位整数作为数组维度。我只想允许编译器使用应用程序在 64 位模式下运行时可用的额外寄存器和字长。
  3. 是否有 Octave Makefile 中使用的指令的(更)完整列表?
    我只见过makemake checkmake install记录。但显然make distclean也是允许的。(它会删除编译结果,以便您可以完全重建所有内容。)
    我想知道还有什么可用的。

值得一提的是,我尝试过使用
./configure CFLAGS="-O3 -mtune=core2 -m64" CXXFLAGS="-O3 -mtune=core2 -m64"
,令人惊讶的是,它不仅能够构建,而且还能运行并通过make check测试。

但这当然和实际上说出来不一样”作品“。有没有推荐的方法让 Octave 作为 x86_64 应用程序运行?

我也尝试过查看 Octave 内部,Makefile看看能否破译它接受的命令行指令。但我一无所获。我对 Makefile 的工作原理一无所知。

答案1

这取决于你的 gcc 版本、硬件、发行版以及许多其他因素。通常,你的 Linux 发行版提供商会为你进行研究,并在构建软件包时使用这些选项。然而,发行版会尝试让事情适应大多数硬件和用户期望。我发现大多数定制都不需要太多麻烦Gentoo。从头开始安装 Linux 或推出自己的发行版需要做很多工作。我安装了一个 Gentoo,并在内核中关闭了 32 位仿真。

Gentoo 优化指南,最好使用-O2而不是-O3

-O3:这是可能的最高优化级别,也是最危险的。使用此选项编译代码将花费更长的时间,事实上,在 gcc 4.x 中不应在系统范围内使用此选项。自 3.x 版以来,gcc 的行为发生了显著变化。在 3.x 中,-O3 已被证明比 -O2 略快执行时间,但在 gcc 4.x 中不再如此。使用 -O3 编译所有软件包将导致需要更多内存的较大二进制文件,并且会显著增加编译失败或意外程序行为(包括错误)的几率。弊大于利;记住收益递减原则。不建议在 gcc 4.x 中使用 -O3。

-mtune=core2如果你确定这是你处理器的最佳选择,那就没问题了。我个人-march=native更喜欢。参见Gentoo 安全 CFlags

GCC 4.2 引入了新的 -march 选项 -march=native,它会自动检测 CPU 支持的功能并相应地设置选项。如果您使用的是 Intel 或 AMD CPU 并且正在使用 >=sys-devel/gcc-4.2.3,则建议使用 -march=native。

-m64-mtune=core2是处理器选项,应由或自动设置-march=native。请参阅GCC i386 和 x86-64 选项

免责声明: 您不必切换到 Gentoo 即可使用他们的建议从源代码进行编译。

相关内容