В Linux используйте расширение Glibc dladdr()
.
#include <dlfcn.h>
std::string get_library_path() {
Dl_info dl_info;
if(0 != dladdr((void*)get_library_path, &dl_info))
return std::string(dl_info.dli_fname);
else
return std::string();
}
В Windows эквивалент равен GetModuleFileName()