0

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

显示问题的示例代码:

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

4

1 回答 1

0

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

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

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

于 2019-07-16T06:20:07.237 回答