Project

General

Profile

Actions

Feature #20005

closed

Add C API to return symbols of native extensions resolved from features

Added by tagomoris (Satoshi Tagomori) 6 months ago. Updated 5 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:115388]

Description

I want an API to resolve symbols of other native extensions by a feature name and a symbol name (just like dlsym).

(rb_dln_resolve_symbol is an example function name of this feature in the example below)

// "a_client_open" is a function defined in "/..../a_client.so", that should be loaded in Ruby beforehand.

// in the extension to be "a.so"
VALUE (*a_client_open)(VALUE);

void Init_a(void)
{
  a_client_open = (VALUE(*)(VALUE))rb_dln_resolve_symbol("a_client", "a_client_open");
  // the return value may be NULL if the symbols is not found
}

This API is to replace direct reference of external symbols.

Currently, native extensions have to just call the function of other extensions directly on the assumption of:

  • The dependency native extension is already loaded
  • The symbol is defined correctly in the dependency (the version of dependency is correct&expected)
    Otherwise, it crashes.

This API provides a way for developers to raise exceptions if the resolved symbol is NULL, and these exceptions can display meaningful messages and instructions to the users of extensions.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like1Like0Like0Like0Like0Like0Like0Like0Like0