Statische Funktionen



  • Kontext: Portierung von Bibliotheken auf anderes Betriebssystem

    In fremden Source-Code sind mehrere statische Funktionen definiert,
    die ihrerseits Funktionen aufrufen. die mein OS nicht bereitstellt.

    Die Aufrufe dieser statischen Funktionen sind mit #ifdefs umgeben, die nie wahr werden. Demnach werden die statischen Funktionen nie aufgerufen und die OS-Funktionen werden eigentlich nicht benötigt.

    Leider ist es nun so, dass der Compiler hier keine Unterscheidung trifft und alle fehlenden Referenzen moniert.

    Gibt es hier eine einfache Möglichkeit, nur die tatsächlich erreichbaren Funktionen herauszufinden?

    (Ich kann den fremden Code nicht ändern)



  • Kannst Du mal ein Minimalbeispiel posten? Irgendwas stimmt an Deiner Beschreibung nicht. Code der in #if 0 ... #endif (oder ähnlichem) eingeschlossen ist, wird schon vom Präprozessor rausgeworfen, kommt also nie beim Compiler, geschweige denn beim Linker an. Und erst der Linker würde über nicht auflösbare Referenzen meckern.


  • Mod

    Das ist keine Frage zu C++, sondern bezüglich deiner Werkzeuge. Daher:
    Ausgangssystem? Zielsystem?
    IDE/Toolchain auf Ausgangssystem? IDE/Toolchain auf Zielsystem?

    Wieso kannst du den fremden Code nicht ändern, wenn du doch den Sourcecode hast?


  • Mod

    SG1 schrieb:

    Kannst Du mal ein Minimalbeispiel posten? Irgendwas stimmt an Deiner Beschreibung nicht. Code der in #if 0 ... #endif (oder ähnlichem) eingeschlossen ist, wird schon vom Präprozessor rausgeworfen, kommt also nie beim Compiler, geschweige denn beim Linker an. Und erst der Linker würde über nicht auflösbare Referenzen meckern.

    Die Aufrufe der Funktionen sind in ifdefs, nicht die Funktionen selbst. Der Compiler wird erst einmal Code für die unaufgerufenen Funktionen erzeugen, denn sie sind prinzipiell erreichbar und er weiß schließlich nicht, was später beim Linken alles noch dazu kommt. Und der Linker beschwert sich dann über die fehlenden Referenzen.

    Der Linker könnte prinzipiell nur benutzte Funktionen linken. ld kann es jedenfalls, wenn man ihm entsprechende Parameter übergibt. Daher ist es wichtig zu wissen, von welcher Toolchain wir überhaupt reden.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wir arbeiten mit dem Code Composer Studio und dem dazugehörigen TI-Compiler.
    Zielplattform ist ein ARM-Target, Entwicklungsumgebung läuft unter Windows.


  • Mod

    Aber das Ziel ist schon, am Ende ein lauffähiges Programm zu haben und nicht, wie die Frage in deinem Eingangsbeitrag lautet, die Namen der betroffenen Funktionen zu erfahren, oder?

    Die typischen Linker unter Windows sind sicher auch nicht blöder als unter Linux. Musst du mal in der Dokumentation (oder bei Google) gucken, wie man ihm einredet, alle unbenutzten Symbole raus zu werfen.



  • Im Moment reichen mir die Namen der Funktionen, die ich nicht portieren muss.

    Ich habe es mit: --generate_dead_funcs_list=feedback.txt versucht, aber die generierte XML (igitt) Datei beinhaltet keine der verdächtigen Funktionen.

    Nach der Portierung sollte das Programm natürlich lauffähig sein.

    Im Moment habe ich alle Funktionen (inklusive derer, die ich wahrscheinlich nicht brauche) ausgestubbt und mit Breakpoints versehen. Das ist aber kein wirklich brauchbares Vorgehen.


Anmelden zum Antworten