ERLEDIGT
JA
JA
ANTWORTEN
1
1
ZUGRIFFE
610
610
EMPFEHLEN
-
Hi,
ich habe für mein Programm ein kleines Plugin-System gebastelt, welches auf Shared Objects (so-Files) basiert. Im Programm selber gibt es z.B. ein Objekt, welches mir für das Senden von Daten über Sockets Buffer bereitstellt (bereits allozierte Speicherbreiche, die aus einem Pool kommen), auf die die Module zugreifen können sollen.
Nun habe ich das Problem, dass ich beim laden der so-Files via der dl-Library einen Speicherzugriffsfehler erhalte, was ich nur auf dieses Vorgehen von mir erklären kann.
Falls es wichtig ist, wie kompiliert wird, habe ich hier einmal mein Makefile (ist evt. noch etwas unprofessionell - arbeite noch nicht allzulange damit
)
Code bash:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
PROGRAMM = ebn_taskbot SRCS = *.c Network/*.c Modules/*.c INC = -I./Includes/ INC_SQL = -I../MySQLpp/include/mysql++ -I/usr/include/mysql LIB = -L../MySQLpp/lib/ LIBs = -ldl -lpthread -lmysqlpp -lmysqlclient_r OPTIMIZE = -O3 default: all all: $(PROGRAMM) $(PROGRAMM): libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed -DWITH_SQL_SUPPORT $(OPTIMIZE) $(INC) $(INC_SQL) -c Core.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed -DWITH_SQL_SUPPORT $(OPTIMIZE) $(INC) $(INC_SQL) -c MySQL.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Hooks.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Prelinked.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Loader.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Cleanup.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Utils.cpp libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Config/Config.cpp -o Config/Config.o libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed -DWITH_SQL_SUPPORT $(OPTIMIZE) $(INC) $(INC_SQL) -c Network/Server.cpp -o Network/Server.o libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed -DWITH_SQL_SUPPORT $(OPTIMIZE) $(INC) $(INC_SQL) -c Network/ThreadPool.cpp -o Network/ThreadPool.o libtool --silent --mode=compile g++ -static -prefer-non-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Network/DataBuffer.cpp -o Network/DataBuffer.o libtool --silent --mode=link g++ -static -Wl,--as-needed $(OPTIMIZE) $(LIB) $(LIBs) -o out/lib/libcore.la Core.lo MySQL.lo Hooks.lo Prelinked.lo Modules.lo Loader.lo Utils.lo Cleanup.lo Config/Config.lo libtool --silent --mode=link g++ -static -Wl,--as-needed $(OPTIMIZE) -o out/lib/libnet.la Network/Server.lo Network/ThreadPool.lo Network/DataBuffer.lo libtool --silent --mode=link g++ -static -Wl,--as-needed $(OPTIMIZE) -o out/ebn_taskbot out/lib/libcore.la out/lib/libnet.la mods: libtool --silent --mode=compile g++ -shared -prefer-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules/FTP.cpp -o Modules/FTP.o libtool --silent --mode=compile g++ -shared -prefer-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules/PHP.cpp -o Modules/PHP.o libtool --silent --mode=compile g++ -shared -prefer-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules/Space.cpp -o Modules/Space.o libtool --silent --mode=compile g++ -shared -prefer-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules/Domain.cpp -o Modules/Domain.o libtool --silent --mode=compile g++ -shared -prefer-pic -Wall -Wl,--as-needed $(OPTIMIZE) $(INC) -c Modules/CreateLog.cpp -o Modules/CreateLog.o libtool --silent --mode=link g++ -shared -Wl,--as-needed $(OPTIMIZE) -o out/mod/mod_ftp.so Modules/FTP.lo libtool --silent --mode=link g++ -shared -Wl,--as-needed $(OPTIMIZE) -o out/mod/mod_php.so Modules/PHP.lo libtool --silent --mode=link g++ -shared -Wl,--as-needed $(OPTIMIZE) -o out/mod/mod_space.so Modules/Space.lo libtool --silent --mode=link g++ -shared -Wl,--as-needed $(OPTIMIZE) -o out/mod/mod_domain.so Modules/Domain.lo libtool --silent --mode=link g++ -shared -Wl,--as-needed $(OPTIMIZE) -o out/mod/mod_createlog.so Modules/CreateLog.lo
Ich habe es auch schon mit "-module -avoid-version" statt "-shared" beim linken im Bereich mods in Verbindung mit "libtool -mode=install..." versucht - wie ich es irgendwo gelesen habe - bleibt beim gleichen Ergebnis.
Gibt es da wirklich keine Möglichkeit, wie ich auf Funktionen und Objecte in meinem Programm aus den Modulen heraus zugreifen kann? (Außer evt. dem Modul expliziet über einen Funktionsaufruf die Adressen mitzuteilen - ungetestet.)
Gruß,
grubi
-
Nach entlichen Stunden der Sucherrei bin ich durch Zufall über die Option " -rdynamic" für g++ gestoßen. Dadurch wier das Programm so kompiliert / ge-link-t, dass durch dlopen geladen so-Files auf programmeigene Objekte zugreifen können
Ähnliche Themen
-
PHP-Zugriff auf Shared-Memory (Struktur)
Von SouthernWind im Forum PHPAntworten: 7Letzter Beitrag: 05.01.10, 20:11 -
Zugriff auf Objekte
Von smartin123 im Forum JavaAntworten: 7Letzter Beitrag: 12.03.07, 21:43 -
Programminterne Datenbank erweitern
Von codeman im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 13.01.06, 13:35 -
Shared (Linux) Dedicated Server, möglichst günstig
Von lukelukeluke im Forum Hosting & WebserverAntworten: 2Letzter Beitrag: 04.07.05, 13:02 -
Linux und g++ - Shared Library statisch einbinden?
Von DerSieger im Forum C/C++Antworten: 3Letzter Beitrag: 29.05.05, 16:39





Zitieren
Login





