### main.c ### #include #include /* Call bridge function */ void call_bridge(const char* filename) { // Open the library const char* libname = "bridge.so"; printf("Opening library : %s\n", libname); void* handle; handle = dlopen(libname, RTLD_LAZY); handle ? printf("OK\n") : printf("KO\n\t%s\n", dlerror()); if (handle) { // Load the symbol const char* symname = "ruby"; printf("Load symbol : %s\n", symname); typedef void (*symbol_t)(); symbol_t my_dlfunc = (symbol_t) dlsym(handle, symname); const char *dlsym_error = dlerror(); !dlsym_error ? printf("OK\n") : printf("KO\n\t%s\n", dlsym_error); // Execute the function if (!dlsym_error) my_dlfunc(filename); // Close the library if opened printf("Closing library\n"); int status = dlclose(handle); (status==0) ? printf("OK\n") : printf("KO\n\t%s\n", dlerror()); } } /* Main function */ int main(int argc, char **argv) { const int nb_run = 3; for (int i=0; i set RUBY_SOLIB = setenv LD_LIBRARY_PATH ".:$RUBY_SOLIB:$LD_LIBRARY_PATH" # Compilation gcc -g -fPIC -Wall -std=c99 -I$RUBY_H_FILE -c bridge.c ld -shared --export-dynamic -L$RUBY_SOLIB -lruby bridge.o -o bridge.so gcc -g -Wall -std=c99 -ldl main.c -o main # Simulation ./main