Wie exportieren Sie und uptiertes Symbol aus der gemeinsam genutzten Bibliothek?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie exportieren Sie und uptiertes Symbol aus der gemeinsam genutzten Bibliothek?

Post by Anonymous »

Ich muss so etwas wie Plugin-Mechanismus implementieren.

Code: Select all

class BOOST_SYMBOL_VISIBLE Backend
{
public:
virtual ~Backend();
[[nodiscard]] const UID &get_uid() const;
[[nodiscard]] virtual bool something_supported() const = 0;
...
std::unique_ptr get_derived_instance() { return std::make_unique(); }
und Backend Nachkommen in einer freigegebenen Bibliothek, d. H. Spezifische Backend : Klasse Exporte_Declspec Spezifische Backend: public Knp :: core :: Backend . Spezifische Backend Instanzen werden durch Funktionsschöpfer erstellt, die aus einer Bibliothek exportiert wurden:

Code: Select all

auto creator = boost::dll::import_alias(
boost::filesystem::path(backend_path), "create_backend",
boost::dll::load_mode::append_decorations);
...
std::shared_ptr backend = creator();
Dieser Teil funktioniert.

Code: Select all

class EXPORT_DECLSPEC BaseA
{
public:
virtual void method() = 0;
virtual ~BaseA() = default;
};

class EXPORT_DECLSPEC DerivedA : public BaseA
{
public:
DerivedA() = default;
~DerivedA() override = default;

void method() override;

};
< /code>
und in der freigegebenen Bibliothek .cpp: < /p>
void DerivedA::method()
{
std::cout 
, aber die Linkphase passt nicht mit den folgenden Fehlern: < /p>
[100%] Linking CXX executable test_deb
/usr/bin/ld: CMakeFiles/test_deb.dir/loader_test.cpp.o: in function `BaseLoadTest_BaseLoadTest1_Test::TestBody()':
test_deb/loader_test.cpp:131: undefined reference to `typeinfo for DerivedA'
/usr/bin/ld: CMakeFiles/test_deb.dir/loader_test.cpp.o: in function `DerivedA::DerivedA()':
include/devices/dev_a.h:45: undefined reference to `vtable for DerivedA'
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/test_deb.dir/build.make:124: test_deb] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1174: CMakeFiles/test_deb.dir/all] Error 2
gmake: *** [Makefile:156: all] Error 2
addieren -e Option hilft nicht (dynamic_cast vs dynamic bibliotheksgrenzen).>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post