-static inline void write_long(long v)
-{
- write_bytes((char *)&v, sizeof(long));
-}
+ if(!gl_libs)
+ {
+ char *lib_names = strdup(get_lib_names());
+ unsigned n_libs = 1;
+ unsigned j;
+
+ for(i=0; lib_names[i]; ++i)
+ if(lib_names[i]==':')
+ ++n_libs;
+
+ gl_libs = (void **)malloc((n_libs+1)*sizeof(void *));
+ i = 0;
+ n_libs = 0;
+ for(j=0;; ++j)
+ {
+ if(lib_names[j]==':' || lib_names[j]==0)
+ {
+ int at_end = (lib_names[j]==0);
+ lib_names[j] = 0;
+
+ gl_libs[n_libs] = dlopen(lib_names+i, RTLD_NOW);
+ if(!gl_libs[n_libs])
+ {
+ fprintf(stderr, "Could not open %s: %s\n", lib_names+i, dlerror());
+ abort();
+ }
+
+ i = j+1;
+ ++n_libs;
+
+ if(at_end)
+ break;
+ }
+ }