2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
11 #include "filesystem/SpecialProtocol.h"
12 #include "utils/log.h"
16 SoLoader::SoLoader(const std::string
&so
, bool bGlobal
) : LibraryLoader(so
)
31 if (m_soHandle
!= NULL
)
34 std::string strFileName
= CSpecialProtocol::TranslatePath(GetFileName());
35 if (strFileName
== "xbmc.so")
37 CLog::Log(LOGDEBUG
, "Loading Internal Library");
38 m_soHandle
= RTLD_DEFAULT
;
42 CLog::Log(LOGDEBUG
, "Loading: {}", strFileName
);
43 int flags
= RTLD_LAZY
;
44 m_soHandle
= dlopen(strFileName
.c_str(), flags
);
47 CLog::Log(LOGERROR
, "Unable to load {}, reason: {}", strFileName
, dlerror());
55 void SoLoader::Unload()
60 if (dlclose(m_soHandle
) != 0)
61 CLog::Log(LOGERROR
, "Unable to unload {}, reason: {}", GetName(), dlerror());
67 int SoLoader::ResolveExport(const char* symbol
, void** f
, bool logging
)
69 if (!m_bLoaded
&& !Load())
72 CLog::Log(LOGWARNING
, "Unable to resolve: {} {}, reason: so not loaded", GetName(), symbol
);
76 void* s
= dlsym(m_soHandle
, symbol
);
80 CLog::Log(LOGWARNING
, "Unable to resolve: {} {}, reason: {}", GetName(), symbol
, dlerror());
88 bool SoLoader::IsSystemDll()
93 HMODULE
SoLoader::GetHModule()
98 bool SoLoader::HasSymbols()