38#include "blocxx/BLOCXX_config.h"
39#if defined(BLOCXX_USE_DYLD)
52std::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
76dyldSharedLibraryLoader::loadSharedLibrary(
const String& filename)
const
78 Logger logger(COMPONENT_NAME);
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);
133dyldSharedLibraryLoader::~dyldSharedLibraryLoader()
#define BLOCXX_LOG_DEBUG2(logger, message)
Log message to logger with the Debug2 level.
#define BLOCXX_LOG_ERROR(logger, message)
Log message to logger with the Error level.
static SharedLibraryLoaderRef createSharedLibraryLoader()
This String class is an abstract data type that represents as NULL terminated string of characters.
GlobalString COMPONENT_NAME
ostream & operator<<(ostream &ostrm, const Bool &arg)
IntrusiveReference< SharedLibrary > SharedLibraryRef
IntrusiveReference< SharedLibraryLoader > SharedLibraryLoaderRef