51 char* binary_name_so=
NULL;
56 if (proc_path !=
NULL)
61 int binary_name_so_length = 3 + strlen(
DL_TAIL) + strlen(binary_name) + strlen(
DIR_SEPP) + strlen(proc_path);
62 binary_name_so = (
char *)
omAlloc0( binary_name_so_length *
sizeof(
char) );
63 while((
p!=
NULL)&&(*
p!=
'\0'))
67 strcpy(binary_name_so,
p);
70 strcat(binary_name_so,binary_name);
72 if(!access(binary_name_so, R_OK)) {
found=
TRUE;
break; }
80 Warn(
"Could not find dynamic library: %s%s (path %s)",
81 binary_name,
DL_TAIL,proc_path);
84 WarnS(
"See the INSTALL section in the Singular manual for details.");
94 void *proc_ptr =
NULL;
100 WarnS(
"Could load a procedure from a dynamic library");
103 WarnS(
"See the INSTALL section in the Singular manual for details.");
120 #define HAVE_ELF_SYSTEM
124 #if (defined(__APPLE__) && defined(__MACH__)) && (!defined(HAVE_ELF_SYSTEM))
125 #define HAVE_ELF_SYSTEM
129 #if defined(__sun) && defined(__SVR4)
130 #define HAVE_ELF_SYSTEM
133 #if defined(HAVE_ELF_SYSTEM)
135 #define DL_IMPLEMENTED
142 return dlopen(filename,RTLD_NOW|RTLD_NOLOAD) !=
NULL;
149 return dlopen(filename, RTLD_NOW|RTLD_GLOBAL);
152 if ((filename==
NULL) || (dlopen(filename,RTLD_NOW|RTLD_NOLOAD)==
NULL))
153 return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
155 Werror(
"module %s already loaded",filename);
162 void *
dynl_sym(
void *handle,
const char *symbol)
170 return(dlsym(handle, symbol));
175 return(dlclose (handle));
187 #if defined(HPUX_9) || defined(HPUX_10)
188 #define DL_IMPLEMENTED
191 typedef char *((*func_ptr) ());
197 struct shl_descriptor *desc;
198 for (
int idx = 0; shl_get(idx, &desc) != -1; ++idx)
200 if (strcmp(filename, desc->filename) == 0)
return TRUE;
207 shl_t handle = shl_load(filename, BIND_DEFERRED, 0);
209 return ((
void *) handle);
212 void *
dynl_sym(
void *handle,
const char *symbol)
217 handle = PROG_HANDLE;
219 if (shl_findsym((shl_t *) & handle, symbol, TYPE_PROCEDURE, &
f) == -1)
221 if (shl_findsym((shl_t *) & handle, symbol, TYPE_UNDEFINED, &
f) == -1)
231 shl_unload((shl_t) handle);
246 #ifndef DL_IMPLEMENTED
258 void *
dynl_sym(
void *handle,
const char *symbol)
270 STATIC_VAR char errmsg[] =
"support for dynamic loading not implemented";