// Copyright (c) OpenMMLab. All rights reserved. #include #include #ifdef _WIN32 #include #else #include #endif #ifdef _WIN32 #define LIBPREFIX "" #define LIBSUFFIX ".dll" #elif defined(__APPLE__) #define LIBPREFIX "lib" #define LIBSUFFIX ".dylib" #else #define LIBPREFIX "lib" #define LIBSUFFIX ".so" #endif namespace mmdeploy { namespace { void* mmdeploy_load_library(const char* name) { fprintf(stderr, "loading %s ...\n", name); #ifdef _WIN32 auto handle = LoadLibraryExA(name, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); #else auto handle = dlopen(name, RTLD_NOW | RTLD_GLOBAL); #endif if (!handle) { fprintf(stderr, "failed to load library %s\n", name); return nullptr; } return handle; } // clang-format off class Loader { public: Loader() { const char* modules[] = { @_MMDEPLOY_DYNAMIC_MODULES@ }; for (const auto name : modules) { std::string libname = std::string{} + LIBPREFIX + name + LIBSUFFIX; mmdeploy_load_library(libname.c_str()); } } }; // clang-format on static Loader loader; } // namespace } // namespace mmdeploy