/** * * SharedLibManager.h * An Tao * * Copyright 2018, An Tao. All rights reserved. * https://github.com/an-tao/drogon * Use of this source code is governed by a MIT license * that can be found in the License file. * * Drogon * */ #pragma once #include #include #include #include #include namespace drogon { class SharedLibManager : public trantor::NonCopyable { public: SharedLibManager(const std::vector &libPaths, const std::string &outputPath); ~SharedLibManager(); private: void managerLibs(); std::vector libPaths_; std::string outputPath_; struct DLStat { void *handle{nullptr}; struct timespec mTime = {0, 0}; }; std::unordered_map dlMap_; void *compileAndLoadLib(const std::string &sourceFile, void *oldHld); void *loadLib(const std::string &soFile, void *oldHld); bool shouldCompileLib(const std::string &soFile, const struct stat &sourceStat); trantor::TimerId timeId_; trantor::EventLoopThread workingThread_; }; } // namespace drogon