Seite 1 von 1

[SLOVED] Entwicklung eigener Bibliotheken

Verfasst: 25. März 2008 11:26
von jd
Hallo Gemeinde,

Ich habe ein Programm, was mit einem Benutzer rechten arbeitet, dazu habe ich ein Login gebaut. Nun möchte ich diesen Login also Modul aufbauen (mit Library), ich habe also 2 Projecte:

1: QTestApplication
2: QLoginLib

Das Problem ist, ich weiß nicht genau wie man Bibliotheken entwickelt.
Schwerpunkt ist bei mir die main.cpp. Hier mal ein kleines Beispiel:

lib.h

Code: Alles auswählen

#ifndef LIB_H_
#define LIB_H_
#include <QtGui>

class CLib {
	public:
		CLib() {}
		~CLib() {}
		bool validateLogin( QString username );
};

#endif /*LIB_H_*/
lib.cpp

Code: Alles auswählen

#include "lib.h"

bool CLib::validateLogin( QString username ) {
	if (username == "root")
		return true;
	else
		return false;
}
main.cpp

Code: Alles auswählen

#include <QApplication>
#include "lib/lib.h"

int main(int argc, char *argv[])
{
    QApplication app (argc, argv);

    return app.exec();
}
qlib.pro

Code: Alles auswählen

TEMPLATE = lib
TARGET = qlib
QT += core \
    gui
HEADERS += src/lib/lib.h
SOURCES += src/lib/lib.cpp \
    src/main.cpp
FORMS += 
RESOURCES += 
Das Problem ist wie gesagt die main.cpp. Muss ich in meiner main.cpp CLib initialisieren, oder ist die Library so wie sie ist einsatzbereit? Wenn ich das alles richtig verstanden habe ist die Library nix anderes als ein funktionsfähiges Qt-Programm nur das ich nicht mit app sondern mit lib kompiliere oder sehe ich das falsch?

Meine 2. Frage wäre, wie kann ich von einer Lib verschiedene Versionen erstellen? Nach dem kompilieren, habe ich folgende Datein:


ls -al lib*
lrwxrwxrwx 1 osadmin osadmin 16 2008-03-25 11:18 libqlib.so -> libqlib.so.1.0.0
lrwxrwxrwx 1 osadmin osadmin 16 2008-03-25 11:18 libqlib.so.1 -> libqlib.so.1.0.0
lrwxrwxrwx 1 osadmin osadmin 16 2008-03-25 11:18 libqlib.so.1.0 -> libqlib.so.1.0.0
-rwxr-xr-x 1 osadmin osadmin 356423 2008-03-25 11:18 libqlib.so.1.0.0


Wich kann ich die 1.0.0 in 2.0.0 ändern? (außer die Datei auf dem Filesystem um zu benennen?

Falls jemand etwas lese Stuff zu dem thema hätte, wäre ich dankbar.

so long

jd

Verfasst: 25. März 2008 11:57
von Christian81
Ich sehe zwar nirgends wo Du in main.cpp eine Funktion aus deiner Lib aufrufst, aber ansonsten ist es so ok.

Versionsnummer: http://doc.trolltech.com/4.3/qmake-vari ... ml#version

Verfasst: 25. März 2008 13:49
von jd
Genau das meine ich, ich dachte mir schon das ich die Funktion in main aufrufen muss. Aber wozu? die lib binde ich ja in mein Hauptprogramm ein und rufe die Funktion validateLogin() aus meinem Hauptprogramm auf. Warum und vor allem wie muss ich die Funktion in meinem "libProgramm" aufrufen? Bei mir scheitert es etwas an der Logik, warum muss ich die Funktion aufrufen wenn die Daten vom Hauptprogramm kommen und ich die Funktion aus dem Hauptprogramm eh aufrufen muss um meinen Login zu validieren?

Verfasst: 25. März 2008 13:53
von Christian81
Ich sehe nirgends einen Aufruf von validateLogin()

Aber wenn es linkt, wird es richtig sein.

Verfasst: 25. März 2008 17:16
von jd
So, ich habe das jetzt hingekommen, das mein Bibliothek in meinem Hauptprogramm funktioniert. Jedoch ist mir eins unklar:

Warum muss ich die .so und die .h einbinden? Ich verstehe den Aspekt an sich aber den nutzen nicht. Im Endeffekt mache ich mir das Leben leichter wenn ich einfach ein "Plugin-Ordner" in meinem Hauptprogramm erstelle und die dazugehörigen .h + .cpp Files rein klatsche. Da brauche ich mit der library nicht rum eiern. Oder habe ich das einfach in den falschen Hals bekommen? Ich meine Was ist nun der Unterschied zwischen meiner "Plugin-Ordner-Methode" und der Library? Das Resultat ist das selbe, und ich muss kein Pfade zu der .so setzen etc. Irgendwas scheine ich da nicht richtig zu machen. Ich habe mir das eigentlich so vorgestellt, das ich lediglich meine .so-Datei einbinden muss und habe dann Zugriff auf die Funktionen, wenn ich jedoch noch die ganzen .h-Dateien mitliefern muss, habe ich meiner Meinung nach mehr Aufwand und das ganze rentiert sich in meinen Augen nicht, sprich ich sehe da einfach keinen Vorteil.

Hoffe mir kann da jemand in meinem Kopf was richtig stellen.

Verfasst: 25. März 2008 17:20
von Christian81
Warum Du eine Lib baust? Damit sie von mehreren Projekten verwendet werden kann.

Den Header brauchst Du zum kompilieren. den Verweis auf die Lib brauchst du zum Linken.

Verfasst: 25. März 2008 17:36
von jd
Christian81 hat geschrieben:Warum Du eine Lib baust? Damit sie von mehreren Projekten verwendet werden kann.
Das Argument ist zwar zulässig, weil ich es auch in jedem Buch lese :D , aber die Plugin-Ordner-Methode macht das genau so. Verstehe mich bitte nicht falsch, will hier nix in Frage stellen, sondern es lediglich begreifen, warum ich mehr Aufwand betreiben sollte.

Kann das sein, das der ein zigste Vorteil der ist, das wenn ich "kleine" Updates an der Lib mache, das Hauptprogramm nicht neu kompilieren muss?

Also nicht falsch verstehen, ich unterscheide lediglich zwischen 2 Methoden:

Library bauen und Plugin-Ordner und es spricht eigentlich alles gegen Library (in meinem Kopf).

Verfasst: 25. März 2008 17:45
von Christian81
Die Plugin (wobei es kein Plugin ist, sondern einfach statisch linken) macht es nicht genauso. Dort wird der Code dupliziert und bei jedem Projekt erstens benötigt und zweitens compiliert.

Verfasst: 25. März 2008 17:49
von jd
Ah ok,
Nun hat es "klick" gemacht.

Danke