В Windows несколько конструкторов передаются конструктору DllMain:
BOOL WINAPI DllMain(
__in HINSTANCE hinstDLL,
__in DWORD fdwReason,
__in LPVOID lpvReserved
);
От hinstDLL я могу получить полное имя файла самой DLL, используя GetModuleFileName ():
LPTSTR str = new TCHAR[256];
int libNameLength = GetModuleFileName(hinstDLL, str, 256);
delete[] str;
В приведенном выше примере str теперь содержит полное имя только что загруженной DLL, например, C: \ Windows \ System32 \ MyFile.dll.
В Linux никакие аргументы не передаются конструктору общего объекта:
void `__attribute__` ((constructor)) on_load(void);
Как получить полное имя DLL в этом случае? Дополнительный кредит, если ваше решение работает на Mac тоже. : -)