SWIG:Ruby重载问题

我有一个sinatra Web应用程序和一个C ++库,我可以使用swig创建的绑定在sinatra(ruby)中“需要”。

我还有第二个非常类似的库,其中的函数名称与第一个函数名称部分相同。 当我同时需要它们时,首先加载的那个’获胜’,即对模糊函数名称的调用总是映射到该库。

原因是’require’只加载尚未加载的东西,而’load’无论如何都会加载。 但是,’load’似乎不适用于.so文件,仅适用于ruby源文件。 有帮助吗?

谢谢

require在$“数组中查找以确定是否应该重新加载模块。您可以尝试删除它并要求。但不确定这是否适用于您的用例,因为似乎命名空间仍然可能被污染。

 irb(main):001:0> require 'mysql' => true irb(main):002:0> require 'mysql' => false irb(main):003:0> $".delete('mysql.so') => "mysql.so" irb(main):004:0> require 'mysql' /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlRes /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlField /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant MysqlError /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant VERSION /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_CONNECT_TIMEOUT /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_COMPRESS /usr/lib64/ruby/site_ruby/1.8/x86_64-linux/mysql.so: warning: already initialized constant OPT_NAMED_PIPE  => true