38 #include "blocxx/BLOCXX_config.h"
39 #if defined(BLOCXX_USE_DYLD)
44 namespace BLOCXX_NAMESPACE
52 std::ostream&
operator<<(std::ostream& o, NSObjectFileImageReturnCode
code)
54 #define SIMPLE_NSOBJ_CASE(X) case X: o << ""#X
57 SIMPLE_NSOBJ_CASE(NSObjectFileImageFailure);
59 SIMPLE_NSOBJ_CASE(NSObjectFileImageSuccess);
61 SIMPLE_NSOBJ_CASE(NSObjectFileImageInappropriateFile);
63 SIMPLE_NSOBJ_CASE(NSObjectFileImageArch);
65 SIMPLE_NSOBJ_CASE(NSObjectFileImageFormat);
67 SIMPLE_NSOBJ_CASE(NSObjectFileImageAccess);
70 #undef SIMPLE_NSOBJ_CASE
76 dyldSharedLibraryLoader::loadSharedLibrary(
const String& filename)
const
80 NSObjectFileImage image = 0;
81 NSObjectFileImageReturnCode dsoerr = NSCreateObjectFileImageFromFile(filename.c_str(), &image);
82 const char* err_msg = NULL;
83 NSModule libhandle = NULL;
85 if (dsoerr == NSObjectFileImageSuccess)
87 libhandle = NSLinkModule(image, filename.c_str(), NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE);
90 NSLinkEditErrors errors;
93 NSLinkEditError(&errors, &errorNumber, &fileName, &err_msg);
95 NSDestroyObjectFileImage(image);
99 err_msg =
"cannot create object file image";
115 NSUnLinkModule(libhandle, FALSE);
121 BLOCXX_LOG_ERROR(logger, Format(
"dyldSharedLibraryLoader::loadSharedLibrary:"
133 dyldSharedLibraryLoader::~dyldSharedLibraryLoader()
139 #endif // #if defined(BLOCXX_USE_DYLD)