30 #ifndef MBXMLUTILS_SHAREDLIBNAME
31 # error "MBXMLUTILS_SHAREDLIBNAME must be defined before including this implementation file."
34 #include <boost/preprocessor/cat.hpp>
39 # define _GNU_SOURCE // dladdr requires _GNU_SOURCE to be defined
48 extern "C" void *__ImageBase;
51 std::string pathAtLoadTime=getcwd(buffer,
sizeof(buffer));
56 namespace MBXMLUtils {
58 std::string BOOST_PP_CAT(
get, BOOST_PP_CAT(MBXMLUTILS_SHAREDLIBNAME, SharedLibPath))() {
59 static std::string ret;
65 char moduleName[2048];
66 GetModuleFileName(reinterpret_cast<HMODULE>(&__ImageBase), moduleName,
sizeof(moduleName));
70 dladdr(reinterpret_cast<void*>(&BOOST_PP_CAT(
get, BOOST_PP_CAT(MBXMLUTILS_SHAREDLIBNAME, SharedLibPath))), &info);
72 std::string name(info.dli_fname);
73 ret=name[0]==
'/'?name:pathAtLoadTime+
"/"+name;
80 #undef MBXMLUTILS_SHAREDLIBNAME