Demo.hpp
Code: Alles auswählen
#ifndef DEMO_HPP
#define DEMO_HPP
class Demo {
public:
Demo();
~Demo();
void foo();
int bar(double value);
};
#endif
Code: Alles auswählen
#include <iostream>
#include "Demo.hpp"
Demo::Demo() {
std::cout << "Demo instance created\n";
}
Demo::~Demo() {
std::cout << "Demo instance destroyed\n";
}
void Demo::foo() {
std::cout << "Demo did foo\n";
}
int Demo::bar(double value) {
std::cout << "Demo did bar\n";
return (int)value;
}
Code: Alles auswählen
g++ -fPIC -c Demo.cpp
g++ -shared -o libDemo.so Demo.o
Und dann gleich die nächste Frage: Wie würde das aussehen, wenn ich die Anwendung für Windows kompiliere und ausführen will?
LG Glocke
/EDIT: Ich hab noch was gefunden aber das scheint auch nicht so richtig die Lösung zu sein:
test.cpp
Code: Alles auswählen
#include <dlfcn.h>
#include "Demo.hpp"
int main() {
void* handle = dlopen("libDemo.so", RTLD_LAZY);
Demo* (*create)(); // constructor
void (*destroy)(Demo*); // destructor
create = (Demo* (*)())dlsym(handle, "create_demo");
destroy = (void (*)(Demo*))dlsym(handle, "destroy_demo");
Demo* myDemo = (Demo*)create();
//myDemo->foo();
//myDemo->bar(15.3);
destroy(myDemo);
}
Erstmal meldet es meinen Lieblingsfehler: Speicherzugriffsfehler (Speicherabzug geschrieben), entferne ich die Kommentare (vor den beiden Funktionsaufrufen), kompiliert er nicht einmal

Und ich hab keinen richtigen Ansatzpunkt dafür/tmp/cc0XrMTf.o: In function `main':
test.cpp:(.text+0x63): undefined reference to `Demo::foo()'
test.cpp:(.text+0x79): undefined reference to `Demo::bar(double)'
collect2: ld gab 1 als Ende-Status zurück

