Bibliotheksbahängigkeiten graphisch darstellen



  • Hallo

    Ich hab jetzt kein 100%ig passendes Unterforum gefunden.
    Aber ist es möglich mittels Doxygen bzw irgend einem anderen Tool die Bibliotheksbahängigkeiten
    Visuel darzu stellen ?

    Also als Bsp.
    Lib1.lib Lib2.lib werden von Programm.exe eingebunden. Das man das irgendwie graphisch darstellt ?
    Ich finde da nicht so richtig die Option dazu oder womit macht ihr das ?

    Grüße


  • Mod

    😕 Was hast du denn?

    Einen Quelltext? Der bindet keine Bibliotheken ein.

    Eine exe? Die Abhängigkeiten kann man sich mit Tools ausgeben lassen (z.B ldd), aber wie soll das grafisch dargestellt werden? Das ist einfach eine Liste mit den Namen der Bibliotheken. Willst du noch einen Rahmen drum machen? Du kannst die Liste natürlich noch rekursiv durchgehen um zu sehen, welche Bibliotheken welche Bibliotheken einbinden und das dann hübsch mit Pfeilen malen. Ist es das, was du meinst?



  • Naja ok vielleicht etwas unglücklich ausgedrückt.
    Ich meinte ein Projekt braucht Lib1.lib Lib2.lib um die Exe zu bauen. Jetzt würde ich gern Graphisch sehen, welche "libs" gebraucht werden. Also es geht um die Projektabhängigkeiten. Und das würde ich gerne mittels
    UML Diragramm dargestellt haben :). Also schon so wie du meinst (Rahmen,Pfeilen,etc) von der darstellung.

    Das selbe hätte ich auch gerne für "include"/headerdatein und ihre Abhängigkeiten. Geht das gibt es das ?



  • Wie SeppJ schon gesagt hat, gibts da nichts grafisch groß zu machen. Weil die Libs nur von einer Sache gebraucht werden: der EXE. Das kann man doch schnell per Hand in jedem beliebigen Programm erstellen, z.B. PowerPoint oder GraphWiz. Notfalls per ASCII:

    MeinProgramm --+ Boost.Thread
                   |
                   + Boost.RegEx
                   |
                   + OpenGL32
    

    Fertig.

    Und die Includes, die kann tatsächlich Doxygen erzeugen.



  • Ja aber der Handarbeit wollte/will ich ja entgehen :).
    Wenn man ganz viele kleine Projekte hat wäre es halt einfach gewesen wenn das ein Tool für mich macht.

    Aber mit dem GraphViz kann ich mir vielleicht so ein kleines Tool basteln. Thx.




  • Mod

    asdgasfasdf schrieb:

    Doxygen: http://library.gnome.org/devel/libsigc++/stable/inherits.html

    😕 Das hat was mit der Fragestellung zu tun?

    An den Threadersteller: Was heißt hier Handarbeit? Schreib dir doch einfach ein kleines Shellscript, das alle Executables durchgeht. Es würde im übrigen helfen, wenn du uns dein System nennen würdest. Ein Tool für Linux (ldd) wurde dir ja schon genannt. Weiß nicht, ob dir das weiterhilft.



  • Das System sollte egal sein. Ich will die Abhängigkeit unabhängig vom System.
    Also Windows/Linux und so allgemein wie möglich. (Naja ok das ist vielleicht zuviel des Guten :))

    ldd kann ich nicht einsetzen weil da doch das binary schon vorhanden sein muss ? Die gibt es aber nicht.
    Oder hab ich was falsch verstanden ? Dann schon mal Sorry ? 🙂

    Ich will aus einem haufen von einzelnen Projekten die "dummerweise" alle einzelteile sind aber abhängig zu einander sind,
    (die Abhängikeit aber nicht mehr bekannt sind) die Abhängikeiten herausfinden, damit ich sehe welches zuerst gebaut werden muss.

    Im ersten Fall beziehe ich das auf ein Windowssystem mit VC2008. danach Linux.

    Daher würde ich jetzt mal alle Projektfiles durchsuchen und deren Abhängigkeit mit dieser Graphviz Bibliothek versuchen darzustellen.
    Dann würde ich sehen welches zuerst gebaut werden muss und welche danach.

    Oder gibt es doch ein Tool mit dem man soetwas Darstellen kann bzw geht es einfacher 😃 😃 ?



  • cppdepend


  • Mod

    martin_zi schrieb:

    Das System sollte egal sein. Ich will die Abhängigkeit unabhängig vom System.
    Also Windows/Linux und so allgemein wie möglich. (Naja ok das ist vielleicht zuviel des Guten :))

    ldd kann ich nicht einsetzen weil da doch das binary schon vorhanden sein muss ? Die gibt es aber nicht.
    Oder hab ich was falsch verstanden ? Dann schon mal Sorry ? 🙂

    Ich will aus einem haufen von einzelnen Projekten die "dummerweise" alle einzelteile sind aber abhängig zu einander sind,
    (die Abhängikeit aber nicht mehr bekannt sind) die Abhängikeiten herausfinden, damit ich sehe welches zuerst gebaut werden muss.

    Im ersten Fall beziehe ich das auf ein Windowssystem mit VC2008. danach Linux.

    Daher würde ich jetzt mal alle Projektfiles durchsuchen und deren Abhängigkeit mit dieser Graphviz Bibliothek versuchen darzustellen.
    Dann würde ich sehen welches zuerst gebaut werden muss und welche danach.

    Oder gibt es doch ein Tool mit dem man soetwas Darstellen kann bzw geht es einfacher 😃 😃 ?

    Die Bibliothek wird erst von der Executable eingebunden. Ohne die Executable kannst du nicht feststellen, welche Bibliotheken gebraucht werden. Dies geht aus dem Quelltext nicht hervor. Allerbestens indirekt aus dem Makefile und auch darauf kann man sich eigentlich nicht verlassen, denn nur weil im Makefile etwas gelinkt wird, heißt das ja noch nicht, dass es auch benutzt wird.

    Meinst du eventuell gar nicht die Abhängigkeit von Bibliotheken sondern die Abhängigkeit von Headern? Das ist wiederum kein Problem mittels des Quelltextes. Doxygen ist dein Freund.



  • Was wie wo ? Also jetzt verstehe ich gar nichts mehr :D.

    Vom Executable habe ich nie geredet. Ich meinte das ich ldd ja nur dann einsetzen kann wenn ich das Executable als binarfile habe. Weil ldd doch nur
    binarfiles analysiert. aber genau das habe ich eben nicht. Ich habe 200 unterverzeichnise mit vielen cpp und header files und Projekten.
    Die einen bauen *.lib bzw die dlls dazu. Also um genauer zu sein ein paar statische libs und ein paar dynamische links.
    Leider ist mir aber nicht bekannt wie die abhängikeit der Projekte ist. Will ich die Exe bauen fehlt natürlich alles andere. Will ich dll xxyy bauen fehlt aber der wieder was usw.
    Daher ist die Frage ? Welches ist das erste Projekt ? Damit ich alles bauen kann und mir mal ein Makefile oder sonst was basteln kann.
    Und darum geht es auch.

    Aus dem Quelltext kann man schon einiges herauslesen. wenn z.b mit Loadlibrary eine dll geladen wird ...
    Oder mit #import "test.lib" ...

    so hab mir mal was mit Graphiviz fürs erste was gebastelt anhand der Projketfile welche libs benötigt werden etc. Dann eventuell noch denn ich muss den Quellcode durchsuchen nach Loadlibrary etc.
    Aber das Bild was ich jetzt mal habe reicht mir schon damit ich die unabhängigen Projekte kenne. 😃

    @Artchi
    Thx

    Ach auch danke für den Tipp von CppDepend

    "CppDepend is a tool that simplifies managing a complex C\C++ (Native,Mixed and COM) code base."

    COm-abhängikeiten auch nicht schlecht 🙂 muss ich mir zumindest mal ansehen.

    Gruß


  • Mod

    martin_zi schrieb:

    Was wie wo ? Also jetzt verstehe ich gar nichts mehr :D.

    Vom Executable habe ich nie geredet. Ich meinte das ich ldd ja nur dann einsetzen kann wenn ich das Executable als binarfile habe. Weil ldd doch nur
    binarfiles analysiert. aber genau das habe ich eben nicht. Ich habe 200 unterverzeichnise mit vielen cpp und header files und Projekten.
    Die einen bauen *.lib bzw die dlls dazu. Also um genauer zu sein ein paar statische libs und ein paar dynamische links.
    Leider ist mir aber nicht bekannt wie die abhängikeit der Projekte ist. Will ich die Exe bauen fehlt natürlich alles andere. Will ich dll xxyy bauen fehlt aber der wieder was usw.
    Daher ist die Frage ? Welches ist das erste Projekt ? Damit ich alles bauen kann und mir mal ein Makefile oder sonst was basteln kann.
    Und darum geht es auch.

    Hättest du das mal gleich gesagt. 🙄 Deine ursprüngliche Frage hat nur Verwirrung gestiftet. Ja, cppdepend und Co. sind für das was du eigentlich willst eine Möglichkeit.



  • Hmm dachte eigentlich das habe ich. Das sind doch "Bibliotheksbahängigkeiten" oder nennt man das anderes? 😮
    Ok im Bsp habe ich mich echt unglücklich ausgedrückt. 🙄 Gebs ja zu.

    Aber danke für die Hilfe.


  • Mod

    martin_zi schrieb:

    Hmm dachte eigentlich das habe ich. Das sind doch "Bibliotheksbahängigkeiten" oder nennt man das anderes? 😮
    Ok im Bsp habe ich mich echt unglücklich ausgedrückt. 🙄 Gebs ja zu.

    Aber danke für die Hilfe.

    Das sind die Abhängigkeiten deiner Quelltexte zueinander. Aber das hat nicht direkt was mit Bibliotheken zu tun. Ein Beispiel:

    Quellcode Bibliothek 1:

    void foo(int *i)
    {
      (*i)++;
    }
    

    Quellcode Bibliothek 2:

    void foo(int *i)
    {
      (*i)--;
    }
    

    Quellcode meines Programmes:

    void foo(int*);
    
    int main()
    {
     int i=1;
     foo(&i);
     printf("i ist: %i \n",i);
     return 0;
    }
    

    Von welcher Bibliothek ist mein Programm abhängig?

    Compiliere ich mit

    cc main.c -lBibliothek1
    

    so hängt es von Bibliothek 1 ab und gibt 2 aus. Compiliere ich stattdessen mit

    cc main.c -lBibliothek2
    

    so hängt es von Bibliothek 2 ab und gibt 0 aus.

    Und deshalb kann man die eigentliche Bibliotheksabhängigkeit erst bei der Executable selbst angeben.



  • Ahhhh ok gutes Beispiel gutes Argument 😉

    Aus meiner Sicht hab ich das viel zu starr gesehen. 🙄
    Ja du hast schon recht.

    Gruß


Anmelden zum Antworten