问题标签 [extconf.rb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4893 浏览

ruby - 如何在 Windows 上使用 MinGW 制作和编译 Ruby Gems?

尝试在 Windows 机器上更新一些 gem,但对于没有预编译二进制文件的 gem,我不断收到此错误输出:

提供的配置选项:

这些是在安装 gem 期间提供给extconf.rb ruby​​ 文件的配置选项。

我已经安装了MinGW,所以我应该拥有安装、制作和编译这些 gem 所需的一切。
However, I do not know how to change the configuration for RubyGems so that when extconf.rb is called it includes the appropriate options pointing to the MinGW include directory.

0 投票
1 回答
405 浏览

ruby - 一个目录下的多个 ruby​​ 扩展模块

离散 ruby​​ 扩展模块的源代码可以存在于同一个目录中,由同一个extconf.rb脚本控制吗?

背景:我有一个包含两个扩展模块foo.sobar.so的项目,它们目前位于它们自己的子目录中,如下所示:

我希望所有.c.h来源都在ext/一个extconf.rb文件的控制下,但我不知道如何mkmf玩。

0 投票
1 回答
244 浏览

c++ - 当一个扩展包含来自另一个扩展的头文件时,如何编写 extconf.rb 文件?

这是一个后续问题:一个目录下的多个 Ruby 模块

如果这些扩展相互包含会发生什么?例如,您具有以下结构:

ext/bar/bar.h中,你有一个

foo.hfoo.cpp编译成表格foo.o,让生活更复杂一点。

最后, foo 和 bar 必须是单独的扩展。

这是如何管理的?我不知道如何添加../foo到搜索路径中bar.h,主要是。符号链接似乎是 hack-ish。

0 投票
2 回答
1051 浏览

c++ - 我将如何指示 extconf.rb 使用额外的 g++ 优化标志,哪些是可取的?

我正在使用Rice为 Ruby gem 编写 C++ 扩展。扩展名采用共享对象 (.so) 文件的形式。

这需要'mkmf-rice'而不是'mkmf',但两者(AFAIK)非常相似。

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

但我认为必须有更好的方法。我知道我能做到

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

第二个问题:对于 Ruby 加载的共享对象,哪些优化是安全的?我可以做类似的事情-funroll-loops吗?大家有什么推荐的?

这是一个科学计算项目,所以越快越好。内存不是什么大问题。

0 投票
0 回答
269 浏览

gem - 在 FreeBSD 上使用 Rake 在 dep_selector Ruby gem 中编译 C 扩展

我正在尝试安装 Ruby gem: dep_gecode。它编译了一些 C 扩展,但编译失败,因为 cpp 编译器没有使用正确设置的包含文件夹运行。

当我运行rake install它时,它会自动创建一个 Makefileextconf.rb来编译扩展。当我编辑 Makefile 并手动添加标志-I/usr/local/include时,扩展的编译成功。但是当我重新运行时rake install,Makefile 被覆盖并且编译再次失败。显然我需要修复extconf.rb,但我不太知道如何修复。

现在更详细一点。gem的来源dep_gecode在这里:

https://github.com/opscode/dep-selector

extconf.rb需要修改的文件在这里:

https://github.com/opscode/dep-selector/blob/master/ext/dep_gecode/extconf.rb

我想在生成的 Makefile 中更改的是这一行:

而不是此时正在生成的这个:

如您所见,/usr/local/include缺少包含路径。这是 FreeBSD 系统上的标准包含路径,这表明问题可能出在 Rake,而不是这个特定extconf.rb文件。非常感谢任何帮助。

编辑:我刚刚找到了一种解决方法。添加这一行就足以使extconf.rb该文件夹正确出现在生成的Makefile

不确定这是否是解决此问题的正确方法...

0 投票
1 回答
165 浏览

ruby - 在 extconf.rb 中需要 boost::dynamic_bitset<>

我正在发布我的 Ruby C/C++ 扩展,并尝试确保所有需要的库都列在 extconf.rb 中。我无法弄清楚如何需要 boost 库,尤其是 dynamic_bitset<> 类。

到目前为止我尝试了什么:

即使我已经安装了 boost,并且扩展编译得很好,我得到了这个:

关于如何正确要求安装 boost 的任何想法?

0 投票
4 回答
4515 浏览

ruby-on-rails - 在 OSX 上安装 rmagick gem 时出错 - 错误:无法构建 gem 原生扩展

我已经安装了大约 40 个其他 gem,但是由于这个错误,这个无法安装:

使用原生扩展安装 rmagick (2.13.1) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension。

检查 Ruby 版本 >= 1.8.5...是检查 /usr/bin/gcc-4.2...是检查 Magick-config...否无法安装 RMagick 2.13.1。在 /Users/durrantm/.rvm/gems/ruby-1.9.2-p290@ruby1.9.2_Abroad101/bin:/Users/durrantm/.rvm/gems/ruby-1.9.2-p290 中找不到 Magick-config @global/bin:/Users/durrantm/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/durrantm/.rvm/bin:/Library/PostgreSQL/9.1/bin:/usr/local/bin :/库/PostreSQL/9.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/sbin:/usr/本地/mysql/bin:/Users/durrantm/.rvm/bin

* extconf.rb 失败 * 由于某种原因无法创建 Makefile,可能缺少必要的库和/或头文件。检查 mkmf.log 文件以获取更多详细信息。您可能需要配置选项。

提供的配置选项: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=$ {opt-dir}/lib --with-make-prog --without-make-prog --srcdir=。--curdir --ruby=/Users/durrantm/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

Gem 文件将继续安装在 /Users/durrantm/.rvm/gems/ruby-1.9.2-p290@ruby1.9.2_Abroad101/gems/rmagick-2.13.1 以供检查。结果记录到 /Users/durrantm/.rvm/gems/ruby-1.9.2-p290@ruby1.9.2_Abroad101/gems/rmagick-2.13.1/ext/RMagick/gem_make.out 安装 rmagick (2.13. 1),并且 Bundler 无法继续。gem install rmagick -v '2.13.1'在捆绑之前确保成功。

我试过这个链接 https://github.com/maddox/magick-installer 但它最后出错了:
/usr/bin/install -c -m 644 ./builds/unix/freetype2.pc \ /usr/ local/lib/pkgconfig/freetype2.pc tar:无法识别的存档格式 tar:错误退出因先前的错误而延迟。

现在我正在尝试 Veraticus 的解决方案,然后我会在必要时尝试 Peters。

0 投票
2 回答
869 浏览

ruby - 在开发带有 C 扩展的 ruby​​gem 时,如何使用 Rspec 在本地进行测试?

我正在编写一个包含 C 扩展的 gem。通常,当我编写 gem 时,我会遵循 TDD 的过程,在那里我将编写一个失败的规范,然后处理代码直到它通过,等等......

在“ext/mygem/mygem.c”中使用我的 C 扩展名和在 gemspec 的“扩展名”中配置的有效 extconf.rb,我如何运行我的规范并仍然加载我的 C 扩展名?当我对 C 代码进行更改时,我需要采取哪些步骤来重新编译代码?

这可能是一个愚蠢的问题,但是从我的 gem 的开发源代码树中输入“bundle install”并不会构建任何本机扩展。当我手动运行时,ruby ext/mygem/extconf.rb我确实得到了一个 Makefile(在整个项目的根目录中),然后当我运行时make,我确实得到了一个共享对象(同样,在整个项目的根目录中)。我必须遵循错误的工作流程,因为我知道 .so 应该放在 lib/ 下。除非我应该在开发过程中手动完成?

0 投票
2 回答
1219 浏览

ruby - 编译 Ruby C 扩展时如何静态链接外部库

我正在 Windows 上构建一个 Ruby C 扩展,它需要一些外部 C 库,特别是 libcurl 及其依赖项。我有 curllib dll 和 .a 文件。但是,当我使用 extconf.rb 构建时,它总是动态链接库,这需要有人安装 curl 并在他们的 Windows 路径中使用已编译的扩展。相反,我希望 extconf.rb 静态链接 curl 及其依赖项,以便任何人都可以在 windows 上使用扩展,而无需先将 curllib 添加到他们的路径中。

这是我的 extconf.rb

这是我生成我的makefile的命令

有什么我可以添加到我的 extconf.rb 文件或命令来强制 ruby​​ 将外部库静态链接到我的 c 扩展的东西吗?任何帮助将不胜感激,如果您需要更多信息,请告诉我。

0 投票
1 回答
667 浏览

ruby - 安装opencv GEM - extconf.rb 错误

我已经坚持了几天了,所以请帮忙!

我运行 MAC OS X(10.7.5),安装了 Xcode(4.5.2) 和命令行工具。红宝石 1.9.3-p362,RVM 1.17.8。apple-gcc42 也已安装。我使用 Homebrew 进行安装。

当我尝试安装 Opencv gem 时,出现以下错误:

我已经尝试过几次重新安装 RVM 并进行了类似问题中推荐的其他一些更改。

我的 gem 文件在没有 opencv gem 的情况下编译得很好,但是我在使用 RMagick 时遇到了类似的问题(显示 extconf.rb 错误)。

我应该怎么办?

谢谢!!!