Changeset 2496 in Sophya for trunk/SophyaLib/SysTools/pdlmgr.cc
- Timestamp:
- Feb 3, 2004, 12:05:44 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/SysTools/pdlmgr.cc
r2322 r2496 172 172 cmd = "ld -b -o " + fnameso + " " + fnameobj + " -lm -lc"; 173 173 #elif defined(Darwin) 174 cmd = "cc -bundle -flat_namespace -undefined suppress -o " + fnameso + " " + fnameobj + " -lm -lcc_dynamic -lSystem "; 174 // cmd = "cc -bundle -flat_namespace -undefined suppress -o " + fnameso + " " + fnameobj + " -lm -lcc_dynamic -lSystem "; 175 cmd = "cc -bundle -o " + fnameso + " " + fnameobj + " -lSystem -lm"; 175 176 #else 176 177 cmd = "ld -o " + fnameso + " " + fnameobj + " -lm -lc"; … … 195 196 PDynLinkMgr::PDynLinkMgr(string& soname, bool cp) 196 197 { 197 #ifndef Darwin 198 dlhandle = NULL; 199 #endif 198 dylok = false; 200 199 soName = ""; 201 200 … … 230 229 soName = fnameso; 231 230 231 string sdylerr; 232 232 #if defined(HPUX) 233 dlhandle = NULL;234 233 cerr << "PDynLinkMgr::PDynLinkMgr() Not yet available on HP-UX " << endl; 235 234 return; 236 #else 235 #elif defined(Darwin) 236 NSObjectFileImageReturnCode nsrc = NSCreateObjectFileImageFromFile(fnameso.c_str(), &nsobjfile); 237 if (nsrc == NSObjectFileImageSuccess) { 238 nsmod = NSLinkModule(nsobjfile, fnameso.c_str(), 239 NSLINKMODULE_OPTION_BINDNOW | NSLINKMODULE_OPTION_PRIVATE | 240 NSLINKMODULE_OPTION_RETURN_ON_ERROR); 241 // The second argument of NSLinkModule is the module name 242 // We might associate later a name for the module in the PDynLinkMgr object 243 if (nsmod != NULL) dylok = true; 244 else cerr << "PDynLinkMgr::PDynLinkMgr()/ Error from NSLinkModule ... " << endl; 245 } 246 else { 247 cerr << "PDynLinkMgr::PDynLinkMgr()/ Error from NSCreateObjectFileImageFromFile ... " << endl; 248 if (nsrc == NSObjectFileImageFailure) cerr << " ErrCode= NSObjectFileImageFailure " << endl; 249 else if (nsrc == NSObjectFileImageInappropriateFile) cerr << " ErrCode= NSObjectFileImageInappropriateFile" << endl; 250 else if (nsrc == NSObjectFileImageArch ) cerr << " ErrCode= NSObjectFileImageArch" << endl; 251 else if (nsrc == NSObjectFileImageFormat) cerr << " ErrCode= NSObjectFileImageFormat" << endl; 252 else if (nsrc == NSObjectFileImageAccess) cerr << " ErrCode= NSObjectFileImageAccess" << endl; 253 } 254 #else 255 dlhandle = NULL; 237 256 dlhandle = dlopen(fnameso.c_str(), RTLD_NOW); 238 if (dlhandle == NULL) { 257 if (dlhandle != NULL) dylok = true; 258 else { 259 sdylerr = "Loader Error (dlerror()):"; 260 sdylerr += dlerror(); 261 #endif 262 263 if (!dylok) { 239 264 cerr << "PDynLinkMgr::PDynLinkMgr(): Error opening SO " << fnameso 240 265 << " (" << soname << ")" << endl; 241 string sn = dlerror(); 242 cerr << "Loader Error (dlerror()) :" << sn << endl; 266 if (sdylerr.length() > 0) cerr << sdylerr; 243 267 return; 244 268 } 245 #endif246 269 } 247 270 … … 253 276 #if defined(HPUX) 254 277 cerr << "PDynLinkMgr::~PDynLinkMgr() Not yet available on HP-UX " << endl; 255 return; 256 #else 257 if (dlhandle) dlclose(dlhandle); dlhandle = NULL; 278 // return; 279 #elif defined(Darwin) 280 if (dylok) { 281 if (nsmod != NULL) NSUnLinkModule(nsmod, NSUNLINKMODULE_OPTION_NONE); 282 NSDestroyObjectFileImage(nsobjfile); 283 } 284 #else 285 if (dylok) { 286 if (dlhandle) dlclose(dlhandle); dlhandle = NULL; 287 } 288 #endif 258 289 if (copy) { 259 290 string cmd = "rm -f " + soName; 260 291 system(cmd.c_str()); 261 292 } 262 #endif263 293 } 264 294 … … 269 299 { 270 300 DlFunction f = NULL; 301 if (!dylok) { 302 cerr << "PDynLinkMgr::GetFunction() Error:sharedobjet/dynamic library not open -> f=NULL" << endl; 303 return f; 304 } 271 305 #if defined(HPUX) 272 306 cerr << "PDynLinkMgr::GetFunction() Not yet available on HP-UX " << endl; 273 307 return f; 274 #e lse308 #endif 275 309 #if defined(Darwin) 276 310 string funame = "_" + funcname; 311 NSSymbol nsf = NSLookupSymbolInModule(nsmod, funame.c_str()); 312 f = (DlFunction)NSAddressOfSymbol(nsf); 277 313 #else 278 314 string const & funame = funcname; 279 #endif280 315 if (dlhandle != NULL) 281 316 f = (DlFunction)dlsym(dlhandle, funame.c_str()); 317 #endif 318 282 319 if (f == NULL) cerr << "PDynLinkMgr::GetFunction(): Error linking " << funcname << endl; 283 320 return(f); 284 #endif 285 } 286 287 321 } 322 323
Note:
See TracChangeset
for help on using the changeset viewer.