PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dll erstellen aus *.c + *.h + make



24dan
17-08-2005, 13:38
Also was ich habe sind:
*.c und *.h files die ich bisher über ein make file verlinke und daraus
eine *.o baue die ich dann mit:
./prozess starte.
Wie kann ich das nutzen um daaus eine *.dll zu bauen und wie kann ich die dann einbinden.

System: gcc, suse 8.2 :confused:

SeeksTheMoon
17-08-2005, 13:41
wie das mit make geht weiß ich nicht, aber der gcc Parameter -shared sollte es tun.

Joghurt
17-08-2005, 13:56
gcc -shared -o libfoobar.so foo.c bar.c

anda_skoa
17-08-2005, 15:44
Ich glaube es wäre auch -fpic und -fPIC nicht schlecht

Im Makefile bei den CFLAGS eintragen.

Oder vielleicht einen Makefilegenerator benutzen und es dem überlassen.

Ciao,
_

24dan
01-09-2005, 09:40
gcc -shared -o libfoobar.so foo.c bar.c

??? "libfoobar.so foo.c bar.c" what´s this? :confused:

bitte mal erklären...

SeeksTheMoon
01-09-2005, 10:10
Foobar ist ein Internetstandard ;)
http://www.faqs.org/rfcs/rfc3092.html

24dan
01-09-2005, 12:05
Hallo...

Habe jetzt mit
gcc -shared filename.c

eine a.out Datei erhalten

Die headerdatei für filename.c lass ich vom main einlesen.
und mit
gcc main.c -o main1 -l a.out
wollte ich ganz dumm das outputfile linken???

Leider bekomme ich nur´ne Fehlermeldung.

Bei der Verwendung von
gcc -shared filename.c -o libfoobar foo.c bar.c findet gcc foo.c und bar.c nicht.

Okay, ist klar das ich die Dateien sicher dort zur Verfügung stellen muss. Mir ist nur nicht klar was die machen.
:o

Joghurt
01-09-2005, 14:16
findet gcc foo.c und bar.c nicht.Warum liest du die Links nicht? Naja, hier nochmal in deutsch:
http://de.wikipedia.org/wiki/Metasyntaktische_Variable
Für dich reicht wohl:
gcc -fPIC -DPIC -shared -o libmeinetollelib.so filename.c(hatte letztens das -fPIC vergessen, und das .so)

(Ich hätte wohl anstatt "foo" und "bar" besser "bla" und "blubb" genommen)

24dan
01-09-2005, 15:28
Ich hätte wohl anstatt "foo" und "bar" besser "bla" und "blubb" genommen
:eek: ich hatte leider nur leistungskurs in japanisch daher weis ich sowas nicht :( :eek: :o :cool:

das mit "meinschatz.so" hat jetzt geklappt.

Nächste Frage:
Wie binde ich die jetzt ein???

Vorschlag zur Güte:
1. cp meinschatz.so /usr/lib
2. in main.c die helloworld.h einbinden
3. make&./main=fertig :o

Joghurt
01-09-2005, 15:34
das mit "meinschatz.so" hat jetzt geklappt.libmeinschatz.so! Libraries beginnen immer mit lib

1. cp libmeinschatz.so /usr/local/lib
2. sicherstellen, dass /usr/local/lib in der /etc/ld.so.conf steht
3. ldconfig /usr/local/lib
4. helloworld.h includen
5. gcc main.c -lmeinschatz -o programmname

Schau dir mal automake in Verbindung mit libtool an. Das vereinfacht das alles, wenn man es erstmal kann.

Oder alternativ SCons.

24dan
05-09-2005, 09:36
:)

Es hat geklappt. Danke.

Was passiert beim ausführen von ldconfig?

1. der nachstehende Pfad wird in die /etc/Id.so.conf eingetragen?
2. es prüft die Lib´s im nachstehenden Pfad (/usr/local/lib)?

ja, "man ldconfig" aber vielverstanden habe ich da nicht. :(

Giuly
05-09-2005, 10:20
ldconfig baut den Cache mit den shared objects

24dan
05-09-2005, 14:57
wollte gerne einen eigenen folder "/usr/local/lib/personal"
für meine Lib´s nutzen.
- habe die lib da rein kopiert
- /etc/ld.so.conf erweitert um diesen pfad
- mit ldconfig /pfad oben angegeben

Problem:
Er kann die Lib nicht finden???? :confused: