tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
663
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    _Grubi _Grubi ist offline Mitglied Gold
    Registriert seit
    Sep 2009
    Beiträge
    216
    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
     

  2. #2
    _Grubi _Grubi ist offline Mitglied Gold
    Registriert seit
    Sep 2009
    Beiträge
    216
    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

  1. PHP-Zugriff auf Shared-Memory (Struktur)
    Von SouthernWind im Forum PHP
    Antworten: 7
    Letzter Beitrag: 05.01.10, 20:11
  2. Zugriff auf Objekte
    Von smartin123 im Forum Java
    Antworten: 7
    Letzter Beitrag: 12.03.07, 21:43
  3. Programminterne Datenbank erweitern
    Von codeman im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 13.01.06, 13:35
  4. Shared (Linux) Dedicated Server, möglichst günstig
    Von lukelukeluke im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 04.07.05, 13:02
  5. Antworten: 3
    Letzter Beitrag: 29.05.05, 16:39