Anzeige:
Ergebnis 1 bis 13 von 13

Thema: dll erstellen aus *.c + *.h + make

  1. #1
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76

    dll erstellen aus *.c + *.h + make

    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:
    Code:
    ./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
    Geändert von 24dan (17-08-2005 um 13:41 Uhr)
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

  2. #2
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    wie das mit make geht weiß ich nicht, aber der gcc Parameter -shared sollte es tun.
    I haven't lost my mind - It's somewhere on a backup-disc

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Code:
    gcc -shared -o libfoobar.so foo.c bar.c

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76
    Zitat Zitat von Joghurt
    Code:
    gcc -shared -o libfoobar.so foo.c bar.c
    ??? "libfoobar.so foo.c bar.c" what´s this?

    bitte mal erklären...
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

  6. #6
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    Foobar ist ein Internetstandard
    http://www.faqs.org/rfcs/rfc3092.html
    I haven't lost my mind - It's somewhere on a backup-disc

  7. #7
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76
    Hallo...

    Habe jetzt mit
    Code:
    gcc -shared filename.c
    eine a.out Datei erhalten

    Die headerdatei für filename.c lass ich vom main einlesen.
    und mit
    Code:
    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
    Code:
    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.
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von 24dan
    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:
    Code:
    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)
    Geändert von Joghurt (01-09-2005 um 14:19 Uhr)

  9. #9
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76
    Zitat Zitat von Joghurt
    Ich hätte wohl anstatt "foo" und "bar" besser "bla" und "blubb" genommen
    ich hatte leider nur leistungskurs in japanisch daher weis ich sowas nicht

    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
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von 24dan
    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.

  11. #11
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76


    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.
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

  12. #12
    Registrierter Benutzer Avatar von Giuly
    Registriert seit
    28.04.2003
    Ort
    HB-Nord
    Beiträge
    201
    ldconfig baut den Cache mit den shared objects

  13. #13
    Registrierter Benutzer Avatar von 24dan
    Registriert seit
    07.07.2005
    Beiträge
    76
    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????
    ...der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott. (Werner Heisenberg 1901-1976, Nobelpreisträger für Physik)
    debian on acer travelmate c300: http://adweb.desy.de/~kaemtner/

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •