问题标签 [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.
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.
ruby - 一个目录下的多个 ruby 扩展模块
离散 ruby 扩展模块的源代码可以存在于同一个目录中,由同一个extconf.rb
脚本控制吗?
背景:我有一个包含两个扩展模块foo.so和bar.so的项目,它们目前位于它们自己的子目录中,如下所示:
我希望所有.c
和.h
来源都在ext/
一个extconf.rb
文件的控制下,但我不知道如何mkmf
玩。
c++ - 当一个扩展包含来自另一个扩展的头文件时,如何编写 extconf.rb 文件?
这是一个后续问题:一个目录下的多个 Ruby 模块
如果这些扩展相互包含会发生什么?例如,您具有以下结构:
在ext/bar/bar.h
中,你有一个
foo.h
并foo.cpp
编译成表格foo.o
,让生活更复杂一点。
最后, foo 和 bar 必须是单独的扩展。
这是如何管理的?我不知道如何添加../foo
到搜索路径中bar.h
,主要是。符号链接似乎是 hack-ish。
c++ - 我将如何指示 extconf.rb 使用额外的 g++ 优化标志,哪些是可取的?
我正在使用Rice为 Ruby gem 编写 C++ 扩展。扩展名采用共享对象 (.so) 文件的形式。
这需要'mkmf-rice'而不是'mkmf',但两者(AFAIK)非常相似。
默认情况下,编译器使用标志-g -O2
。就个人而言,我觉得这种做法很愚蠢,因为启用任何优化都很难进行调试。我求助于编辑 Makefile 来删除我不喜欢的标志(例如,-fPIC -shared
当我需要使用main()
而不是 Ruby 的钩子进行调试时删除)。
但我认为必须有更好的方法。我知道我能做到
添加其他标志。但是如何在不直接编辑 Makefile 的情况下删除东西呢?
第二个问题:对于 Ruby 加载的共享对象,哪些优化是安全的?我可以做类似的事情-funroll-loops
吗?大家有什么推荐的?
这是一个科学计算项目,所以越快越好。内存不是什么大问题。
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
:
不确定这是否是解决此问题的正确方法...
ruby - 在 extconf.rb 中需要 boost::dynamic_bitset<>
我正在发布我的 Ruby C/C++ 扩展,并尝试确保所有需要的库都列在 extconf.rb 中。我无法弄清楚如何需要 boost 库,尤其是 dynamic_bitset<> 类。
到目前为止我尝试了什么:
即使我已经安装了 boost,并且扩展编译得很好,我得到了这个:
关于如何正确要求安装 boost 的任何想法?
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。
ruby - 在开发带有 C 扩展的 rubygem 时,如何使用 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/ 下。除非我应该在开发过程中手动完成?
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 扩展的东西吗?任何帮助将不胜感激,如果您需要更多信息,请告诉我。
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 错误)。
我应该怎么办?
谢谢!!!