【发布时间】:2011-03-15 03:00:22
【问题描述】:
背景:
多年前,我继承了一个代码库,该代码库使用 Visual Studio (VC++) 标志“/fp:fast”在特定计算量大的库中生成更快的代码。不幸的是,'/fp:fast' 产生的结果与不同编译器 (Borland C++) 下的同一个库略有不同。由于我们需要产生完全相同的结果,我切换到“/fp:precise”,它工作得很好,从那以后一切都很顺利。但是,现在我在 uBuntu Linux 10.04 上用 g++ 编译同一个库,我看到了类似的行为,我想知道它是否可能有类似的根本原因。我的 g++ 构建的数值结果与我的 VC++ 构建的数值结果略有不同。这让我想到了我的问题:
问题:
g++ 是否具有与 VC++ 中的 'fp:fast' 和 'fp:precise' 选项等效或相似的参数? (它们是什么?我想激活 'fp:precise' 等效项。)
更多详细信息:
我使用调用 g++ 的“make”进行编译。据我所知(make 文件有点神秘,不是我写的)添加到 g++ 调用的唯一参数是“正常”参数(包括文件夹和要编译的文件)和 -fPIC(我不确定这个开关的作用,我在“手册”页上看不到它)。
“man g++”中唯一相关的参数似乎是用于打开优化选项。 (例如 -funsafe-math-optimizations)。但是,我不认为我在打开任何东西,我只是想关闭相关的优化。
我尝试过发布和调试版本,VC++ 为发布和调试提供相同的结果,而 g++ 为发布和调试提供相同的结果,但我无法让 g++ 版本提供与 VC++ 相同的结果版本。
【问题讨论】:
-
我在谷歌上搜索了一下后发现了-fPIC的含义: -fPIC 如果目标机器支持,则发出与位置无关的代码,适用于动态链接,即使(3,n)个分支需要大位移。
-
这可能很耗时,但值得付出努力:您能否尝试找出 MSVC 和 gcc 之间某些计算存在分歧的最早指令(或至少代码行)?
-
是的,我正在处理您的建议。不幸的是,我有点在 linux n00b 上,所以我需要一些时间才能把所有东西都放在一起!
-
您好,您解决过这个问题吗?
标签: c++ visual-studio-2008 g++ compiler-optimization ubuntu-10.04