Seite 1 von 1

dll dynamisch laden

Verfasst: 15. Juni 2012 13:47
von Jürgen
Hallo,
ich benutze den QT-Creator und versuche verzweifelt eine dll dynamisch in eine einfache QT-Konsoleanwendung zu laden. Nach dem Studium der QT-Hilfe scheint mir dazu der "dlopen(...)"-Befehl das Mittel der Wahl zu sein. Leider ist dieser Befehl aber wohl in der "dlfcn.h" definiert.
Beim kompilieren der Zeile #include <dlfcn.h> erhalte ich die Meldung " dlfcn.h: no such file or directory>". Es gibt die Datei mehrfach im QT-Installationsverzeichnis, aber meinem Projekt scheint da irgendeine Pfad zu fehlen.

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include "../testLibDlg/testLibDlg_global.h"
#include <dlfcn.h>
#include <stdio.h>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    void *handle;
    char *error;

    handle = dlopen("D:/C++QT/testLibDlg-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug/debug/testLibDlg.dll", RTLD_LAZY);
    if (!handle) {
        fprintf(stderr, "%s\n", dlerror());
        exit(EXIT_FAILURE);
    }

    dlerror();    /* Clear any existing error */
    [...]

Danke schon mal
Jürgen

Re: dll dynamisch laden

Verfasst: 15. Juni 2012 14:04
von franzf
Jürgen hat geschrieben:Nach dem Studium der QT-Hilfe scheint mir dazu der "dlopen(...)"-Befehl das Mittel der Wahl zu sein.
Wie das? Qt bietet explizit QLibrary für solche Zwecke. Wo genau liest du in der Qt-Hilfe, dass man dafür dlopen nehmen soll?!?

Desweiteren ist Laden zur Laufzeit hier unnötig. Du willst eigentlich dynamisch Linken, also zur Linktime des Programms die externe DLL feste an dein executable binden. Schau dir dazu den Eintrag "LIBS" in der Doku zum Thema "qmake Variable Reference" an (Im Qt Assistant suchts sich ganz leicht).