我在用着 为红宝石宝石编写C ++扩展。扩展名为共享对象(.SO)文件的形式。

这需要“ MKMF-RICE”而不是“ MKMF”,但两者(AFAIK)非常相似。

默认情况下,编译器使用标志 -g -O2. 。就我个人而言,我觉得这种愚蠢,因为启用了任何优化,很难进行调试。我求助于编辑makefile来取出我不喜欢的旗帜(例如,删除 -fPIC -shared 当我需要调试 main() 而不是红宝石的钩子)。

但是我认为有更好的方法。我知道我可以做

$CPPFLAGS += " -DRICE"

添加其他标志。但是,如何在不直接编辑makefile编辑的情况下删除东西呢?

次要问题:哪些优化对Ruby加载的共享对象是安全的?我可以做类似的事情吗 -funroll-loops?你们都推荐什么?

这是一个科学计算项目,因此越快越好。内存不是很多问题。

非常感谢!

有帮助吗?

解决方案

快速而肮脏的方法是将-O0添加到CXXFLAG,这将关闭优化。以后的选项将覆盖较早的选项。

就插件的安全性而言,您应该能够执行任何不影响ABI的事情。没有测试,我不明白为什么-Funroll会。当然,安全并不意味着更好。正如人页面所指出的那样,“ -funroll-loops使代码更大,并且可能会或可能不会使其运行速度更快。”

其他提示

定义您使用

-D name=definition

就像您在示例中所做的一样:

$CPPFLAGS += " -DRICE"

-u名
取消任何先前的名称定义,即内置或提供-D选项。

$CPPFLAGS += " -URICE"

尽管我不确定它是否会像您想要的那样帮助Undewining -O2。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top