如何在Ubuntu中不加编译器硬化的情况下编译宝石

how to compile a gem without compiler hardening in Ubuntu?

本文关键字:情况下 编译 编译器 Ubuntu      更新时间:2023-10-16

我正在使用一个宝石,因为出现的是编译器硬化设置,因此在Ubuntu上不会编译。

如果我克隆了宝石的存储库并修改makefile以添加 -Wno-format-security的cppflag,则可以很好地编译。

我的问题是,当我尝试使用gem install ztx-0.0.1.gem安装该宝石时,它试图再次编译GEM,但却以某种方式忽略了Makefile指定的CPP标志。(我认为这正在发生,因为在添加-Wno-format-security标志之前,我会遇到与我遇到的相同错误(。

我在调用gem install...之前尝试导出cppflags,但结果相同。

所以,我的问题是,我如何强制这些CPP标志,以便我可以编译该宝石?

我找到了解决问题的解决方案,尽管该解决方案不是对此问题的直接答案。

我想禁用由Ubuntu中编译器硬化设置引起的编译器错误。正如@Jesper在评论中指出的那样,这可能不是一个明智的想法。

,但我想知道为什么它不起作用。它在MacOS上汇总了。然后我注意到大多数错误都在一个名为tx_swig_wrap.cxx的文件中。

我对Swig一无所知,但是我有点新的,它允许从Ruby,Python等调用一些C/C 代码。

那时,我意识到该包装文件可能是由Swig生成的,并且我遇到的错误可能是由较新的Swig版本解决的。

包装器文件在顶部有一个评论部分,可以告诉您创建它的SWIG版本。是1.x,最新的swig是v3.x。

我安装了swig,我了解到可以通过执行swig -c++ -ruby tx_swig.i再生包装器。

我只是这样做的,使用了新生成的文件,毫无问题地编译了宝石。