Alle Funktionsaufrufe durch versionierte Funktionsaufrufe ersetzen

  • C++

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Elanda.

    Alle Funktionsaufrufe durch versionierte Funktionsaufrufe ersetzen

    Moin zusammen,

    Bedingt dadurch, dass ich auf moderne Sprachfeatures gebunden bin, fiel die Entscheidung, eine relativ moderne Version des G++-Compilers zu nehmen, statt der veralteten Version, die mit der SDK vom Hersteller eines Gerätes geliefert wurde.

    Zum Großteil macht das allerdings keine Probleme, nur habe ich beim Portieren einer Anwendung den Fall, dass der Linker immer gegen fcntl@GLIBC_2.28 linkt.
    In meinen Quelldateien ist das nicht so das Problem, das kann ich einfach mit folgendem Stück Code umbiegen:

    C-Quellcode

    1. ​__asm__(".symver fcntl,fcntl@GLIBC_2.4");


    Die Frage wäre jetzt konkret, gibt es die Möglichkeit, Datei- und Bibliothekübergreifend (bspw. durch meine CMakeLists.txt) alle Aufrufe zu fcntl umzubiegen?
    Ich stelle mir vor, eine Art Makro, oder ein Compiler/Linker-Flag, aber ich wüsste jetzt nicht wie und mir fallen scheinbar auch nicht die richtigen Begriffe ein, damit Google die gewünschten Ergebnisse ausspuckt.

    Ich danke schon mal im Voraus für hilfreiche Tipps :)
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    Naja, zu aller erst könntest du mal "ldd --version" überprüfen und nachsehen wie glibc versioning für dich aussieht.
    Außerdem ist GLIBC eine C und nicht C++ library, daher update auch gcc und nicht nur g++.

    Was du versuchen könntest, obwohl gar nicht gerne gesehen, ist gcc's "-include" Option.
    Du könntest deine Zeile in einen seperaten Header einfügen und dann in CMake an den Preprocessor an diese Option weiterleiten.

    Hier kurze Erklärung:
    ​ -include fileProcess file as if #include "file" appeared as the first line of the primary source file. However, the first directory searched for file is the preprocessor’s working directory instead of the directory containing the main source file. If not found there, it is searched for in the remainder of the #include "…" search chain as normal. If multiple -include options are given, the files are included in the order they appear on the command line.
    Quelle: gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

    Aber wie gesagt du wirst einige Gegner davon sehen.
    Die meisten bestehen darauf es in jeder Datei lieber selbst einzufügen als zu solchen faulen Tricks zurückgreifen.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------