SWIG: проблемы с перегрузкой Ruby - PullRequest
0 голосов
/ 19 октября 2010

У меня есть веб-приложение sinatra и библиотека C ++, которую я могу «потребовать» в sinatra (ruby), используя привязки, созданные swig.

У меня также есть вторая-очень похожая библиотека, в которой имена функций частично такие же, как и в первой.Когда я требую их обоих, тот, который загружается первым, «выигрывает», то есть вызовы неоднозначных имен функций всегда отображаются в эту библиотеку.

Причина в том, что 'require' загружает только то, чтоуже загружен, в то время как «загрузка» перезагружается несмотря ни на что.Однако «загрузка», по-видимому, неприменима к файлам .so, только к исходным файлам ruby.Любая помощь?

Спасибо

1 Ответ

0 голосов
/ 19 октября 2010

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
<snip>
=> true 
...