gpt4 book ai didi

Perl Inline::C 默认标志

转载 作者:行者123 更新时间:2023-12-04 12:02:42 25 4
gpt4 key购买 nike

我使用 Inline::C 制作了一个模块,我注意到在主机 MacOS 和 guest Linux VM 上运行它之间存在一些意想不到的性能差异。调查一下,这是由于默认的 C 编译器标志不同。
在 MacOS 上,它们似乎是:

-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -O3   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"

与 Centos 7 相比:
 -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"

我的代码的主要区别是 O3 与 O2,所以我查看了 Inline 文档并使用了:
use Inline (C => Config => ccflags => '-O3');

明确指定 -O3 .嗯,结果是 -O3 -O2以这种方式应用,因此指定 ccflags 不会覆盖默认值,它只是在它们之前添加,最终没有任何效果。
任何想法默认来自哪里和/或如何覆盖它以指定我想要的优化级别。

最佳答案

似乎添加了 optimize配置选项可能会做你想做的事。这是添加 optimize => '-O3' 之前的输出的一个非常简短的示例之后:

use warnings;
use strict;

use Inline 'C';

use Inline C => 'Config',
build_noisy => 1,
force_build => 1,
optimize => '-O3',
;

print add(5, 6);

__END__
__C__

int add (int x, int y){
return(x + y);
}

这是输出(为简洁起见):

前:
cc -c -I"/home/steve/scratch/inline" -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2
后:
cc -c -I"/home/steve/scratch/inline" -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O3
...在 Linux Mint 18.3 上。

默认 来自 $Config{optimize} ,在 perl 时存储为只读默认值在系统上编译/构建。

关于Perl Inline::C 默认标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com