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;
void method2();
};
// Some function to get derived instance.
BaseA* get_derived_instance() { return new DerivedA(); }
< /code>
und in der freigegebenen Bibliothek .cpp: < /p>
void DerivedA::method()
{
std::cout
// Gtest.
TEST(BaseLoadTest, BaseLoadTest1)
{
auto da = dynamic_cast(get_derived_instance());
da->method2();
}
< /code>
, 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).>
Ich muss so etwas wie Plugin -Mechanismus implementieren. Für die Bibliotheksladung verwende ich Boost.dll.[code]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; void method2(); };
// Some function to get derived instance. BaseA* get_derived_instance() { return new DerivedA(); } < /code> und in der freigegebenen Bibliothek .cpp: < /p> void DerivedA::method() { std::cout // Gtest. TEST(BaseLoadTest, BaseLoadTest1) { auto da = dynamic_cast(get_derived_instance()); da->method2(); } < /code> , 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 [/code] addieren -e Option hilft nicht (dynamic_cast vs dynamic bibliotheksgrenzen).>
Ich muss so etwas wie Plugin-Mechanismus implementieren. class BOOST_SYMBOL_VISIBLE Backend
{
public:
virtual ~Backend();
[ ] const UID &get_uid() const;
[ ] virtual bool something_supported() const...
Anwendung verwendet Bibliothek A 1.0.
Bibliothek B verwendet eine neuere Version der Bibliothek A 2.0 mit inkompatiblem ABI/Verhalten.
Anwendung möchte ältere...
Anwendung verwendet Bibliothek A 1.0.
Bibliothek B verwendet eine neuere Version der Bibliothek A 2.0 mit inkompatiblem ABI/Verhalten.
Anwendung möchte ältere...
Anwendung verwendet Bibliothek A 1.0.
Bibliothek B verwendet eine neuere Version der Bibliothek A 2.0 mit inkompatiblem ABI/Verhalten.
Anwendung möchte ältere...
Anwendung verwendet Bibliothek A 1.0.
Bibliothek B verwendet eine neuere Version der Bibliothek A 2.0 mit inkompatiblem ABI/Verhalten.
Anwendung möchte ältere...