Ruby Fiddle-重新加载动态库

时间:2019-07-14 16:19:50

标签: ruby fiddle ruby-ffi

我正在使用Fiddle从用C语言编写的动态库中加载函数。在开发过程中,我需要对库进行更改并重新加载以进行测试。问题是,除非重新启动脚本,否则dlload不会重新加载库。我正在Ruby中为SketchUp开发插件,因此“重新启动”脚本实际上意味着重新启动应用程序。

显示问题的示例代码:

require 'fiddle'
require 'fiddle/import'
require 'fileutils'

module RG
  extend Fiddle::Importer  
  dlload 'utils.dylib'
end

FileUtils.rm 'utils.dylib'

module RG
  extend Fiddle::Importer  
  dlload 'utils.dylib'
end

如果是第一次启动脚本,则没有错误。如果您第二次启动它,则会收到错误:image not found,如预期的那样。

因此,似乎在执行过程中,库仅导入一次。 关于如何强制Fiddle重新加载库的任何建议?

我正在使用macosRuby 2.0

1 个答案:

答案 0 :(得分:0)

以防万一将来有人需要它。您可以使用

@handler.handlers.each {|h| h.close unless h.close_enabled? } unless @handler.nil?
GC.start

因此,您首先关闭所有处理程序,然后强制垃圾回收。

相关问题