我正在使用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
重新加载库的任何建议?
我正在使用macos
和Ruby 2.0
答案 0 :(得分:0)
以防万一将来有人需要它。您可以使用
@handler.handlers.each {|h| h.close unless h.close_enabled? } unless @handler.nil?
GC.start
因此,您首先关闭所有处理程序,然后强制垃圾回收。