1111
1212#include < string>
1313
14+ #include < Poco/SharedLibrary.h>
15+
1416#include < class_loader/class_loader.hpp>
1517#include < pluginlib/class_loader.hpp>
1618
1719#include < cras_cpp_common/type_utils.hpp>
1820
21+ #include " cras_cpp_common/filter_utils/filter_chain.hpp"
22+
1923/*
2024 * In the classes where you need to use this classloader, insert the following code at the very beginning of the CPP
2125 * file:
@@ -47,6 +51,12 @@ class PreloadingClassLoader : public class_loader::ClassLoader
4751 const auto baseType = cras::getTypeName<Base>();
4852 auto metaObject = new class_loader::impl::MetaObject<Impl, Base>(implType, baseType);
4953 metaObject->addOwningClassLoader (this );
54+ // The following block is needed since class_loader 0.5.1
55+ {
56+ metaObject->setAssociatedLibraryPath (" " );
57+ auto & loaded = class_loader::impl::getLoadedLibraryVector ();
58+ loaded.emplace_back (" " , new Poco::SharedLibrary (" linux-vdso.so.1" ));
59+ }
5060 class_loader::impl::getFactoryMapForBaseClass<Base>()[implType] = metaObject;
5161 }
5262
@@ -56,6 +66,14 @@ class PreloadingClassLoader : public class_loader::ClassLoader
5666 const auto implType = cras::getTypeName<Impl>();
5767 auto metaObject = class_loader::impl::getFactoryMapForBaseClass<Base>()[implType];
5868 metaObject->removeOwningClassLoader (this );
69+ // The following block is needed since class_loader 0.5.1
70+ {
71+ auto & loaded = class_loader::impl::getLoadedLibraryVector ();
72+ const auto it = std::find_if (loaded.begin (), loaded.end (),
73+ [](const class_loader::impl::LibraryPair& pair) { return pair.first == " " ; });
74+ if (it != loaded.end ())
75+ loaded.erase (it);
76+ }
5977 class_loader::impl::getFactoryMapForBaseClass<Base>().erase (implType);
6078 delete metaObject;
6179 }
0 commit comments