    # File lib/ffi/ffi.rb, line 71
      def self.create_invoker(lib, name, args, ret_type, options = { :convention => :default })
        # Current artificial limitation based on JRuby::FFI limit
        raise SignatureError, 'FFI functions may take max 32 arguments!' if args.size > 32

        # Open the library if needed
        library = if lib.kind_of?(DynamicLibrary)
          lib
        elsif lib.kind_of?(String)
          # Allow FFI.create_invoker to be  called with a library name
          DynamicLibrary.open(FFI.map_library_name(lib), DynamicLibrary::RTLD_LAZY)
        elsif lib.nil?
          FFI::Library::DEFAULT
        else
          raise LoadError, "Invalid library '#{lib}'"
        end
        function = library.find_function(name)
        raise NotFoundError.new(name, library.name) unless function

        args = args.map {|e| find_type(e) }
        invoker = if args.length > 0 && args[args.length - 1] == FFI::NativeType::VARARGS
          FFI::VariadicInvoker.new(function, args, find_type(ret_type), options)
        else
          FFI::Function.new(find_type(ret_type), args, function, options)
        end
        raise NotFoundError.new(name, library.name) unless invoker

        return invoker
      end