Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Eigene Bibliothek einbinden

13 views
Skip to first unread message

Heinz-Mario Frühbeis

unread,
Mar 27, 2013, 4:56:51 PM3/27/13
to
Hallo zusammen!

Distri: LM14-KDE
IDE: QT-Creator

Mit dem QT-Creator habe ich eine C++-Bibliothek erstellt und nun
versuche ich die in meinem C++-Programm zu verwenden.

Die Lib heiᅵt bkIDA und folgende Dateien habe ich z. Z.:
bkida.cpp
bkida.h
bkida.o
bkida.pro
bkIDA.pro.user
bkIDA_global.h
libbkIDA.so
libbkIDA.so.1.0
libbkIDA.so.1.0.0
Makefile

Die Dateien haben im Moment folgende Berechtigungen:
lesen&schreiben
lesen
lesen

Bei Eigentᅵmer steht mein Benutzername und auch bei Gruppe.

Ich versuche mich an
<http://openbook.galileocomputing.de/linux_unix_programmierung/Kap17-001.htm#RxxKap170010400061A1F0291A1>
zu orientieren, aber kriege es nicht hin.

Wenn ich das soweit richtig verstehe, dann muss ich wohl einige Dateien
in andere Ordner kopieren, was ich ja noch mit "sudo cp ..." hin bekomme.
Aber welche Dateien und wohin?
Und muss ich evtl in der bkida.pro-Datei auch noch was mit
"LIBS += -I/usr/include/ -lbkIDA" (o. s. ᅵ.) eintragen?

Ich hoffe, ihr kᅵnnt mir aufzeigen, wie man es richtig macht, das ich
eigene Bibliotheken fᅵr mein Programm verwenden kann.

Mit Gruᅵ
Heinz-Mario Frᅵhbeis

Rainer Weikusat

unread,
Mar 27, 2013, 5:25:35 PM3/27/13
to
Heinz-Mario Fr�hbeis <Earl...@web.de> writes:

[...]

> Mit dem QT-Creator habe ich eine C++-Bibliothek erstellt und nun
> versuche ich die in meinem C++-Programm zu verwenden.
>
> Die Lib hei�t bkIDA und folgende Dateien habe ich z. Z.:
> bkida.cpp
> bkida.h
> bkida.o
> bkida.pro
> bkIDA.pro.user
> bkIDA_global.h
> libbkIDA.so
> libbkIDA.so.1.0
> libbkIDA.so.1.0.0
> Makefile

[...]

> Wenn ich das soweit richtig verstehe, dann muss ich wohl einige
> Dateien in andere Ordner kopieren, was ich ja noch mit "sudo cp ..."
> hin bekomme.
> Aber welche Dateien und wohin?
> Und muss ich evtl in der bkida.pro-Datei auch noch was mit
> "LIBS += -I/usr/include/ -lbkIDA" (o. s. �.) eintragen?

Zunaechst mal muss die Bibliothek an einem Ort installiert sein, wo
der dynamische Linker sie findet (ich lasse die komplizierteren
Moeglichkeiten mal weg). Falls Du Dir nicht einen Haufen zukuenftige
Probleme einhandeln willst die Dich garantiert zu einer
Notfall-Neuinstallation zwingen werden, solltest Du Dich fuer
'manuelle Installationen' (wenigstens anfangs) auf /usr/local
beschraenken. Im gegebenen Fall hiesse das:

1. Kopiere libbkIDA.so nach /usr/local/lib

2. Falls notwendig, fuege /usr/local/lib zu den Pfaden in
/etc/ld.so.conf hinzu

3. Benutze das ldconfig-Kommando ('ldconfig') um den Cache des
dynamischen Linkers zu aktualisieren.

Falls das wie gewuenscht funktioniert hat, sollte das
(zusammengesetzte) Kommando

ldconfig -p | grep local

Dir jetzt Deine neue Bibliotheksdatei anzeigen. Ist dem so, kannst Du
sie hinfort via -lbkIDA beim Linken benutzen.

Heinz-Mario Frühbeis

unread,
Mar 27, 2013, 7:03:59 PM3/27/13
to
Habe ich gemacht.

> 2. Falls notwendig, fuege /usr/local/lib zu den Pfaden in
> /etc/ld.so.conf hinzu

Da steht im Moment "include /etc/ld.so.conf.d/*.conf" drin.
Wie trage ich denn da noch "/usr/local/lib" ein?
Ich habe da jetzt noch nichts ge�ndert, aber ich gehe davon aus, da� man
sudo braucht um zu speichern und das geht wohl nur per Konsolenfenster?
Und dann w��te ich nicht, wie man eine solche Datei per Konsole �ndert.

> 3. Benutze das ldconfig-Kommando ('ldconfig') um den Cache des
> dynamischen Linkers zu aktualisieren.

Das habe ich gemacht.

> Falls das wie gewuenscht funktioniert hat, sollte das
> (zusammengesetzte) Kommando
>
> ldconfig -p | grep local

Das ergab:
ldconfig -p | grep local
libsvn_ra_local-1.so.1 (libc6,x86-64) =>
/usr/lib/x86_64-linux-gnu/libsvn_ra_local-1.so.1
libbkIDA.so.1 (libc6,x86-64) => /usr/local/lib/libbkIDA.so.1

> Dir jetzt Deine neue Bibliotheksdatei anzeigen. Ist dem so, kannst Du
> sie hinfort via -lbkIDA beim Linken benutzen.
>

In der bkIDA.pro-Datei habe ich folgendes hinzugef�gt:
LIBS += -I/usr/local/lib -lbkIDA

C++:
#include <bkIDA>
int main(){
...
}

Es kommt ein Error:
QtCore/qglobal.h: No such file or directory (in) bkIDA_global.h

bkIDA_global.h:
#ifndef BKIDA_GLOBAL_H
#define BKIDA_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(BKIDA_LIBRARY)
# define BKIDASHARED_EXPORT Q_DECL_EXPORT
#else
# define BKIDASHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // BKIDA_GLOBAL_H

bkida.h:
#ifndef BKIDA_H
#define BKIDA_H

#include "bkIDA_global.h"

class BKIDASHARED_EXPORT BkIDA
{
public:
BkIDA();
int RetIDA(void);
};

#endif // BKIDA_H

Dann habe ich in "bkIDA.pro" auf
"LIBS += -I/usr/include/qt4/QtCore -I/usr/local/lib -lqglobal -lbkIDA"
ge�ndert.
Und noch "#include <qt4/QtCore/qglobal.h>" in "main.cpp" beigef�gt.

Jetzt bekomme ich ein Error:
QTCore/qconfig.h: No such file or directory (in) qglobal.h

Braucht man denn unbedingt diese "bkIDA_global.h"?
Soweit ich gelesen habe, wie man Libs erstellt, konnte ich nie eine
solche Datei aufgef�hrt sehen. "Nur" *.so, *so.1, *.o, *.cpp, *.h.

Ich br�uchte schon eine eigene Lib.
Wie, was mache ich denn nun?

Mit Gru�
Heinz-Mario Fr�hbeis

Rainer Weikusat

unread,
Mar 28, 2013, 11:47:24 AM3/28/13
to
Heinz-Mario Fr�hbeis <Earl...@web.de> writes:
> Am 27.03.2013 22:25, schrieb Rainer Weikusat:
>> Heinz-Mario Fr�hbeis <Earl...@web.de> writes:
>>
>> [...]
>>
>>> Mit dem QT-Creator habe ich eine C++-Bibliothek erstellt und nun
>>> versuche ich die in meinem C++-Programm zu verwenden.

[...]

>> 1. Kopiere libbkIDA.so nach /usr/local/lib
>
> Habe ich gemacht.
>
>> 2. Falls notwendig, fuege /usr/local/lib zu den Pfaden in
>> /etc/ld.so.conf hinzu
>
> Da steht im Moment "include /etc/ld.so.conf.d/*.conf" drin.

Dh "binde alle Dateien in /etc/ld.so.conf/d ein'.

> Wie trage ich denn da noch "/usr/local/lib" ein?
> Ich habe da jetzt noch nichts ge�ndert, aber ich gehe davon aus, da�
> man sudo braucht um zu speichern und das geht wohl nur per
> Konsolenfenster? Und dann w��te ich nicht, wie man eine solche Datei
> per Konsole �ndert.

vi ist Dein Freund :-). Allerdings war der Pfad wohl schon enthalten.

JFTR: Fuer simple Aenderungen wie das hier ginge auch noch

sudo -s
(das sollte eine root shell ergeben)

echo /usr/local/lib >>/etc/ld.so.conf
(fuegt die Zeile /usr... an die genannte Datei an).

[...]

> Das ergab:
> ldconfig -p | grep local
> libsvn_ra_local-1.so.1 (libc6,x86-64) =>
> /usr/lib/x86_64-linux-gnu/libsvn_ra_local-1.so.1
> libbkIDA.so.1 (libc6,x86-64) => /usr/local/lib/libbkIDA.so.1
>
>> Dir jetzt Deine neue Bibliotheksdatei anzeigen. Ist dem so, kannst Du
>> sie hinfort via -lbkIDA beim Linken benutzen.

Das ist OK so.

> In der bkIDA.pro-Datei habe ich folgendes hinzugef�gt:
> LIBS += -I/usr/local/lib -lbkIDA

-I aendert den 'include path' dh die Liste von Verzeichnissen in denen
der Compiler nach Headern (.h) sucht. Um den Bibliothekssuchpfad zu
aendern muesste man -L benutzen. Eventuell ist das aber gar nicht
notwendig weil /usr/local/lib auch ein
'Standard-Bibliotheksverzeichnis ist' (wenigstens in
'entwicklerfreundlichen' Distributionen.
Das sind Fehlermeldungen darueber, dass 'irgendwelche Qt-header' nicht
gefunden wurden. Mit Bibliotheken hat das nichts zu tun.

Rainer Weikusat

unread,
Mar 28, 2013, 6:14:48 PM3/28/13
to
Rainer Weikusat <rwei...@mssgmbh.com> writes:
> Heinz-Mario Frühbeis <Earl...@web.de> writes:
>> Am 27.03.2013 22:25, schrieb Rainer Weikusat:

[...]

>>> 2. Falls notwendig, fuege /usr/local/lib zu den Pfaden in
>>> /etc/ld.so.conf hinzu

[...]

>> Wie trage ich denn da noch "/usr/local/lib" ein?
>> Ich habe da jetzt noch nichts geändert, aber ich gehe davon aus, daß
>> man sudo braucht um zu speichern und das geht wohl nur per
>> Konsolenfenster? Und dann wüßte ich nicht, wie man eine solche Datei
>> per Konsole ändert.
>
> vi ist Dein Freund :-). Allerdings war der Pfad wohl schon enthalten.
>
> JFTR: Fuer simple Aenderungen wie das hier ginge auch noch
>
> sudo -s
> (das sollte eine root shell ergeben)
>
> echo /usr/local/lib >>/etc/ld.so.conf
> (fuegt die Zeile /usr... an die genannte Datei an).

... und natuerlich ausserdem (schamlose Reklame fuer ein Programm
dessen Nuetzlickeit allgemein kolossal unterschaetzt wird[*]) "der
Standard-Texteditor":

sudo ed /etc/ld.so.conf
a
/usr/local/lib
.
wq

Das startet den UNIX(*) 'Zeileneditor' (in diesen neu-heidnischen
Zeiten vermutlich nicht Bestandteil der Defaultinstallation) als root
mit der zu aendernden Datei, gefolgt von dem Anfuege-Kommando ('a'),
gefolgt von dem Text, der angefuegt werden soll, gefolgt von dem "Das
wars"-Kommando ('.'), gefolgt von der Kommandosequenz 'Schreibe die
geaenderte Datei' ('w')/ 'Beende den Editor' ('q').

[*] 'Aus vergangenen Zeiten' sind mir erfreuliche Erinnerungen an den
Zeileneditor, der Bestandteil des Apple Macroassemblers fuer 6501/
65C02 basierende Heimcomputer war, geblieben. Deswegen habe ich mich
irgendwannmal selber in den Hintern getreten und die Bedienung von ed
erlernt. Das hat mein (Arbeits-)Leben sehr vereinfacht, unter anderem
weil ich regelmaessig mit (Cisco) WebEx-Sitzungen gequaelt werde ...

Rainer Weikusat

unread,
Mar 28, 2013, 6:19:46 PM3/28/13
to
Rainer Weikusat <rwei...@mssgmbh.com> writes:
> Heinz-Mario Fr�hbeis <Earl...@web.de> writes:
>> Am 27.03.2013 22:25, schrieb Rainer Weikusat:

[...]

>>> 2. Falls notwendig, fuege /usr/local/lib zu den Pfaden in
>>> /etc/ld.so.conf hinzu

[...]

>> Wie trage ich denn da noch "/usr/local/lib" ein?
>> Ich habe da jetzt noch nichts ge�ndert, aber ich gehe davon aus, da�
>> man sudo braucht um zu speichern und das geht wohl nur per
>> Konsolenfenster? Und dann w��te ich nicht, wie man eine solche Datei
>> per Konsole �ndert.
>
> vi ist Dein Freund :-). Allerdings war der Pfad wohl schon enthalten.
>
> JFTR: Fuer simple Aenderungen wie das hier ginge auch noch
>
> sudo -s
> (das sollte eine root shell ergeben)
>
> echo /usr/local/lib >>/etc/ld.so.conf
> (fuegt die Zeile /usr... an die genannte Datei an).

... und natuerlich ausserdem (schamlose Reklame fuer ein Programm
dessen Nuetzlickeit allgemein kolossal unterschaetzt wird[*]) "der
Standard-Texteditor":

sudo ed /etc/ld.so.conf
a
/usr/local/lib
.
wq

Das startet den UNIX(*) 'Zeileneditor' (in diesen neu-heidnischen
Zeiten vermutlich nicht Bestandteil der Defaultinstallation) als root
mit der zu aendernden Datei, gefolgt von dem Anfuege-Kommando ('a'),
gefolgt von dem Text, der angefuegt werden soll, gefolgt von dem "Das
wars"-Kommando ('.'), gefolgt von der Kommandosequenz 'Schreibe die
geaenderte Datei' ('w')/ 'Beende den Editor' ('q').

[*] 'Aus vergangenen Zeiten' sind mir erfreuliche Erinnerungen an den
Zeileneditor, der Bestandteil des Apple Macroassemblers fuer 6502/

Heinz-Mario Frühbeis

unread,
Mar 28, 2013, 11:16:20 PM3/28/13
to
Gestern habe ich im QT-Creator im Kontextmen� zu meinem Projekt
"Bibliothek hinzuf�gen" ausgew�hlt. Dann kommt eine Auswahl f�r "Interne
-", "Externe -" oder "Systembibliothek", wo ich "Externe" gew�hlt habe,
meine eigene Bibliothek dazu und quasi "ab daf�r".
Und...damit klappt das "auch" nicht. Immer das Gleiche: "QTCore/qglobal"
nicht gefunden.

Heute, oder morgen...werde ich eine "simple" Bibliothek erstellen. Per
*.cpp und *.h und per Konsolenfenster, so ich es denn hin bekomme, wie
z. Bsp. in
<http://openbook.galileocomputing.de/linux_unix_programmierung/Kap17-001.htm#RxxKap170010400061A1F0291A1>,
oder <http://www.willemer.de/informatik/cpp/dynlib.htm> beschrieben.
Dann werde ich ja sehen, denn irnck will es ja funktionieren, da ich mal
davon ausgehe, da� bereits genutzte Bibliotheken keine
Bibliothekname_global.h haben, wo "#include <QTCore/qglobal>"
eingebunden ist und das ein Programm, per QT-Creator erstellt, auch
nicht unbedingt solches braucht.

Rainer Weikusat

unread,
Mar 29, 2013, 9:51:48 AM3/29/13
to
Heinz-Mario Fr�hbeis <Earl...@web.de> writes:

[...]

>>> Jetzt bekomme ich ein Error:
>>> QTCore/qconfig.h: No such file or directory (in) qglobal.h
>>
>> Das sind Fehlermeldungen darueber, dass 'irgendwelche Qt-header' nicht
>> gefunden wurden. Mit Bibliotheken hat das nichts zu tun.
>>
>
> Gestern habe ich im QT-Creator im Kontextmen� zu meinem Projekt
> "Bibliothek hinzuf�gen" ausgew�hlt. Dann kommt eine Auswahl f�r
> "Interne -", "Externe -" oder "Systembibliothek", wo ich "Externe"
> gew�hlt habe, meine eigene Bibliothek dazu und quasi "ab daf�r".
> Und...damit klappt das "auch" nicht. Immer das Gleiche:
> "QTCore/qglobal" nicht gefunden.

,----
| Das sind Fehlermeldungen darueber, dass 'irgendwelche Qt-header' nicht
| gefunden wurden. Mit Bibliotheken hat das nichts zu tun.
`----

Konkret heisst das, das diese Qt-header nicht in einem Verzeichnis
installiert sind, in dem der Compiler nach Headern
sucht. Dh Dein Include-Pfad ist falsch oder den Header gibt es nicht,
zb deswegen, weil er nicht installiert ist oder weil Du den falschen
Namen benutzt.

Heiko Berges

unread,
Mar 29, 2013, 11:48:27 AM3/29/13
to
Rainer Weikusat wrote:
> ... und natuerlich ausserdem (schamlose Reklame fuer ein Programm
> dessen Nuetzlickeit allgemein kolossal unterschaetzt wird[*]) "der
> Standard-Texteditor":
>
> sudo ed /etc/ld.so.conf
> a
> /usr/local/lib
> .
> wq

Der Vollst�ndigkeithalber nicht unerw�hnt lassen m�chte ich,
da� das eigentlich in ed nicht funktioniert:

| wq
| ?
| h
| no space after command

Oder wie es die sus sagen w�rde:

| The Version 7 ed command W, and the BSD ed commands W, wq, and z
| are not present in this volume of POSIX.1-2008.


Wahrscheinlich gibt es aber nicht mehr allzuviele eds, die das
nicht nachger�stet haben.


Heiko

Heinz-Mario Frühbeis

unread,
Mar 29, 2013, 8:52:37 PM3/29/13
to
Gerade hat es mich doch noch zu sehr "gekitzelt" :)

Ich habe also im QT-Creator eine neue Bibliothek aufgebaut >
dann habe ich diese XYZ_global.h entfernt und dazu die Lib bereinigt >
dann die Lib erstellen lassen >
dann in meinem Hauptprogramm per QT-Creator diese erstellte Lib
hinzugef�gt >
in "main" dann die "h-Datei" included und ablaufen lassen.

L�uft.

Mit Gru�
Heinz-Mario <der wieder einen Schritt voran gekommen ist> Fr�hbeis

0 new messages