class FFI::DynamicLibrary
def self.try_load(libname, flags, errors)
def self.try_load(libname, flags, errors) begin lib = FFI::DynamicLibrary.open(libname, flags) return lib if lib # LoadError for C ext & JRuby, RuntimeError for TruffleRuby rescue LoadError, RuntimeError => ex if ex.message =~ /(([^ \t()])+\.so([^ \t:()])*):([ \t])*(invalid ELF header|file too short|invalid file format)/ if File.binread($1) =~ /(?:GROUP|INPUT) *\( *([^ \)]+)/ return try_load($1, flags, errors) end end errors << ex nil end end