lib programmieren

Message
Author
thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#16 Post by thedodger »

@sebastian

> Du hast die Library doch nicht etwa mit strip aller Symbole beraubt ?!

Wenn du mir sagst, wie ich das machen könnte, könnte ich dir sagen, ob ich's getan habe! *g*
Aber meines Erachtens habe ich das eben nicht getan ...

@wolfgang

schon klar, so wird jedenfalls mein Makefile zusammengestellt.


das kuriose ... wenn ich im lib-tree die main-funktion mit den aufgeführten funktionen versehe funktioniert alles ohne probleme!
ach ja, in main.cpp des lib-trees muß ebenfalls eine main() Funktion sein, sonst tilt der Compiler (oder eher der Linker) aus, richtig?

Bodo

Sebastian Ude

Re: lib programmieren

#17 Post by Sebastian Ude »

>ach ja, in main.cpp des lib-trees muß
>ebenfalls eine main() Funktion sein, sonst
>tilt der Compiler (oder eher der Linker)
>aus, richtig?

Nein, da hast du etwas falsch verstanden, oder du machst etwas falsch.
Compilierst du die einzelnen Objectfiles mit der '-c'-Option ?
Oder, hast du zum bauen der Library evtl. nicht '-shared' angegeben ? Dann baust du ein Binary, aber keine Library (und brauchst selbstverständlich auch eine main-Funktion).


>Wenn du mir sagst, wie ich das machen
>könnte, könnte ich dir sagen, ob ich's
>getan habe! *g*
>Aber meines Erachtens habe ich das eben
>nicht getan ...

Hast du dem gcc beim zusammenlinken der Library vielleicht die '-s'-Option angegeben ?
Falls ja, bitte weglassen (kann gar nicht funktionieren).


Insgesamt ist es aus der Ferne schwer zu sagen, was du genau falsch machst.

Vielleicht könntest du mal genau die Schritte, die du zum bauen der Library und zum linken des Programmes gegen die Library getan hast posten.

Also mit anderen Worten: Wir wollen gcc-Aufrufe und / oder Makefiles sehen <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">.

thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#18 Post by thedodger »

kriegst du,wenn ich zu Hause bin und die Sourcen vor mir auf dem Bildschirm flimmern! ;)

Bodo

thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#19 Post by thedodger »

so, hier ist mein Makefile:

CC = g++
O = .

OBJ = $(O)/bstools/bsstring.o $(O)/bstools/bsdebug.o \
$(O)/ums4sql.o \
$(O)/bstools/bsproc.o $(O)/bstools/bserrorhandler.o \
$(O)/bstools/bsutil.o $(O)/bstools/bsconfigure.o \
$(O)/database/umsdatabase.o $(O)/database/umsquery.o \
$(O)/ums/ums.o

C_ARGS = -Wall -I/usr/include/pgsql/ -fPIC -DPIC
L_ARGS = -L/usr/include/pgsql/ -lpq++

EXE=../bin/ums4sql


.cpp.o:
# zum erzeugen einer exe
$(CC) $(C_ARGS) -c -shared $*.cpp -o $(O)/$*.o
# zum erzeugen der lib
$(CC) -shared -o libums4sql.so.1 $(O)/$*.o

all: $(EXE)

new: clean all

clean:
rm -f $(O)/*.o
rm -f $(O)/bstools/*.o
rm -f $(O)/database/*.o
rm -f $(O)/ums/*.o
rm -f *~
rm -f *.bak*
rm -f $(EXE)
rm -f $(EXE).tgz
rm -f errors
rm -f *.so.*
rm -f *.a

distclean: clean

zip: clean
tar czf $(EXE).tgz * --exclude *~ --exclude archiv/* --exclude *.o

$(EXE): $(OBJ)
$(CC) -o $(EXE) $(OBJ) $(L_ARGS)


$(O)/bsstring.o: bsstring.cpp bsstring.h global.h
$(O)/bsdebug.o: bsdebug.cpp bsdebug.h global.h
$(O)/bsconfigure.o: bsconfigure.cpp bsconfigure.h global.h
$(O)/bserrorhandler.o: bserrorhandler.cpp bserrorhandler.h global.h
$(O)/bsutil.0: bsutil.cpp bsutil.h global.h
$(O)/ums4sql.o: ums4sql.cpp ums4sql.h global.h
$(O)/database/database.o: database/database.cpp database/database.h global.h
$(O)/database/umsquery.o: database/umsquery.cpp database/umsquery.h global.h
$(O)/ums/ums.o: ums/ums.cpp ums/ums.h global.h


jupp, ist etwas umfangreicher ;)

Bodo

BTW, lasse ich hier '$(CC) $(C_ARGS) -c -shared $*.cpp -o $(O)/$*.o' das -c weg, bekomme ich beim linken diesen Fehler:

g++ -o ../bin/ums4sql ./bstools/bsstring.o ./bstools/bsdebug.o ./ums4sql.o ./bstools/bsproc.o ./bstools/bserrorhandler.o ./bstools/bsutil.o ./bstools/bsconfigure.o ./database/umsdatabase.o ./database/umsquery.o ./ums/ums.o -L/usr/include/pgsql/ -lpq++
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [../bin/ums4sql] Error 1

und ich habe in ums4sql.cpp garantiert keine main() funktion! <img src="http://www.pl-forum.de/UltraBoard/Images/TooHappy.gif" border="0" align="middle">

thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#20 Post by thedodger »

grumpf ich kann meine nachricht nicht mehr modifizieren ...

naja, dann eben so ...

das compilieren der lib habe ich gerade eben gelöst ... ;)))

.cpp.o:
# zum erzeugen einer exe
$(CC) $(C_ARGS) -c $*.cpp -o $(O)/$*.o
# zum erzeugen der lib
$(CC) -shared -o libums4sql.so.1 $(O)/$*.o
[...]
$(EXE): $(OBJ)
$(CC) -shared -o $(EXE) $(OBJ) $(L_ARGS)

ich sollte beim linken doch eher das '-shared' mit eintragen <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Dafür kann ich noch immer nicht die lib benutzen <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
Die Fehler sind noch immer die selben ...

Sebastian Ude

Re: lib programmieren

#21 Post by Sebastian Ude »

Haargh ... was machst du denn da ?

Entweder du übersetzt zunächst jede Sourcefile einzeln mit der '-c'-Option (ja, für jede Sourcefile einen eigenen gcc-Aufruf) und linkst die entstandenen Objektdateien dann in einem letzten Schritt (ohne die '-c'-Option, aber mit '-shared' für dynamische Libs) zu einem Binary bzw. einer Library zusammen.

Oder du machst alles in einem Rutsch, sprich gibst gcc (g++) alle Sourcefiles als Input und die Library / das Binary als Output an, ohne '-c'-Option (aber wieder mit '-shared' für Libraries).

Aber das was du da machst:

$(CC) $(C_ARGS) -c -shared $*.cpp -o $(O)/$*.o

Ist nicht richtig (zweifacher Denkfehler wenn du es so willst).

thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#22 Post by thedodger »

okay, schon mal ne hilfe ...

ich habe es jetzt auf das abgeändert:

.cpp.o:
$(CC) $(C_ARGS) -c $*.cpp -o $(O)/$*.o
[...]
$(EXE): $(OBJ)
$(CC) -shared -o $(EXE) $(OBJ) $(L_ARGS)

damit läuft das kompilieren der Lib sauber durch.

Bei der testapplikation habe ich dadurch schon mal ein paar Fehler weniger. :)
hauptsächlig solche in der art:

./libums4sql.so: undefined reference to `base'
./libums4sql.so: undefined reference to `BASE::setError(char const *,...)'

Allerdings kann ich die library-funktionen noch immer nicht benutzen:

gcc -L. -L/usr/include/pgsql/ -o ./ums ./bstools/bsstring.o ./bstools/bsdebug.o ./main.o ./bstools/bsproc.o ./bstools/bserrorhandler.o ./bstools/bsutil.o ./bstools/bsconfigure.o -lums4sql
./main.o: In function `main':
./main.o(.text+0x30): undefined reference to `umsLogin(bsString, bsString)'
./main.o(.text+0x4c): undefined reference to `umsLogout(BASE *)'
collect2: ld returned 1 exit status
make: *** [ums] Error 1

das geschieht wohl beim hinzulinken der library ...

ich nehm mal an, da ist mein Makefile noch fehlerhaft.

.cpp.o:
$(CC) $(C_ARGS) -c $*.cpp -o $(O)/$*.o
[...]
$(EXE): $(OBJ)
$(CC) $(L_ARGS) -o $(EXE) $(OBJ) -lums4sql

für mich sieht das doch eigentlcih korrekt aus ...

BTW, gibt es nicht ein Tool, das einem das erstellen eines Makefile mal abnimmt? <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Bodo

thedodger
Posts: 26
Joined: 07. Feb 2001 13:39
Contact:

Re: lib programmieren

#23 Post by thedodger »

STOPP alles zurück ...
es funktioniert! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

*freu-tanz-hinknie und säg* *grins*

ich idiot habe die ganze zeit (naja, seit das linken der lib funktioniert) eine alte lib benutzt! <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
manchmal hat man bretter vorm kopp!

Bodo

Sebastian, vielen Dank für deine Hilfe!!!!

Sebastian Ude

Re: lib programmieren

#24 Post by Sebastian Ude »

<img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Post Reply