#include #include #include int x[2] = {1, 2}; int y[2] = {3, 4}; int z[2]; int main() { void *handle; void (*add_vec)(int *, int *, int *, int); char *error; /* Dynamically load the shared library containing add_vec() */ handle = dlopen("../static_library/libvec.so", RTLD_LAZY); if (!handle) { fprintf(stderr, "%s\n", dlerror()); exit(1); } /* Get a pointer to the add_vec() function we just loaded */ add_vec = dlsym(handle, "add_vec"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); exit(1); } /* Now we can call add_vec() just like any other function */ add_vec(x, y, z, 2); printf("z = [%d %d]\n", z[0], z[1]); /* Unload the shared library */ if ((dlclose(handle)) < 0) { fprintf(stderr, "%s\n", dlerror()); exit(1); } return 0; }