Boost libraries umbenennen?



  • (Hmm ich fürchte ich bin hier falsch, aber bei C++ passt es nicht rein, Compiler sieht mir auch komisch aus und irgendwie passt es nirgendwo. Also hier hin.)

    Ich habe momentan das Problem, dass ich mir unbedingt Die Boost libraries bauen muss. Das wäre eigentlich kein Problem unter Linux. Problematisch wird es allerdings, weil ich einen bestimmten Namen erzwingen muss. Der Grund dahinter ist, dass ich hier eine Beta Version einer proprietären Software rumliegen habe, die gegen eine Boost gelinkt ist. Das Problem ist, dass die es irgendwie hingekriegt haben, die Bibliotheken umzubenennen und eben gegen diese libs zu linken, sodass ich die Software bei mir nicht zum laufen kriege, ohne mir selbst ein anders benanntes Boost(zum Glück weis ich, dass die gegen 1.38 gelinkt haben...) zu bauen. Jetzt habe ich selber schon gesucht, und keinen Hinweis gefunden. Weis da jemand vielleicht was genaueres?

    Ziel muss es sein, dass ich eine lib mit dem Namen libboost_filesystem-mt.so.4 kriege. Standard würde Boost bei mir libboost_filesystem-gcc44-mt-1_38.so erzeugen

    (Achja, bevor es kommt: einfaches umbenennen reicht nicht aus, der Name ist in der lib hartkodiert)



  • ich hab zwar weder ahnung von c++ oder linux, von 'boost' erst recht nicht, aber kannste nicht irgendwas mit hard-links und/oder irgendwelchen systemvariablen (suchpdfad der boost libs etc.) tricksen?
    🙂


  • Administrator

    Das müsste man eigentlich über Boost.Build bzw. bjam regeln können. Ich habe kurz mal nachgeschaut und das folgende könnte hinhauen:

    bjam --help
    ...
      --layout=<layout>       Determines whether to choose library names
                              and header locations such that multiple
                              versions of Boost or multiple compilers can
                              be used on the same system.
    
                                  versioned (default) - Names of boost
                                  binaries include the Boost version
                                  number and the name and version of the
                                  compiler.  Boost headers are installed
                                  in a subdirectory of <HDRDIR> whose
                                  name contains the Boost version
                                  number.
    
                                  system - Binaries names do not include
                                  the Boost version number or the name
                                  and version number of the compiler.
                                  Boost headers are installed directly
                                  into <HDRDIR>.  This option is
                                  intended for system integrators who
                                  are building distribution packages.
    ...
    

    Ansonsten schau dir mal die Dokumentation zu Boost.Build an.

    Grüssli



  • Danke schonmal 🙂

    Die Option kommt zwar schon fast dran, aber eben nur fast. Damit krieg ich keine .4 als Suffix :(. Der Rest stimmt aber. Ich habe mich auch schon durch die Buildfiles gewühlt und ich kann nur erahnen, was da für unmenschliche Gräueltaten verübt wurden um das möglich zu machen. Ich dachte ja zuerst, dass die vielleicht an der Versionsnummer rum gespielt haben, aber das macht das Script nicht mit.

    Hmmpf. Muss ich wohl Dienstag mal jemandem das Leben zur Hölle machen.

    (Jetzt mal ganz ehrlich: Wer das verbrochen hat, verdient es, dass man ihm das Leben zur Hölle macht)


  • Administrator

    Ah, die Nummer ganz übersehen. Ist auch eher abnormal so eine Nummer 🙂
    Aber sag mal, kannst du das Zeug nicht selber machen? Zum Beispiel mal bjam --help eingeben und dann lesen? Nochmals ein Auszug von dieser Hilfe:

    --buildid=ID            Adds the specified ID to the name of built
                              libraries.  The default is to not add anything.
    

    Tönt sehr nach dieser zusätzlich 4 😉

    Grüssli



  • Mit LD_LIBRARY_PATH/LD_PRELOAD kannst du der proprietären Anwendung einfach die passende Version von Boost unterschieben, auch wenn in den Standardpfaden das neue Boost liegt. Dürfte wesentlich angenehmer sein, als Boost umzubenennen.



  • otze schrieb:

    Ziel muss es sein, dass ich eine lib mit dem Namen libboost_filesystem-mt.so.4 kriege. Standard würde Boost bei mir libboost_filesystem-gcc44-mt-1_38.so erzeugen

    (Achja, bevor es kommt: einfaches umbenennen reicht nicht aus, der Name ist in der lib hartkodiert)

    und wer hat jetzt was hartkodiert, dass umbennen/softlink nicht hilft? 😕

    muss eine boost-library so heißen wie man ihr beim kompilieren gesagt hat?

    aktuelle boosts haben immerhin schon beta cmake. Hat mir schon geholfen um bjam zu umgehen.



  • ln -s libboost_filesystem-gcc44-mt-1_38.so libboost_filesystem-mt.so.4
    


  • Registrierter Troll schrieb:

    ln -s libboost_filesystem-gcc44-mt-1_38.so libboost_filesystem-mt.so.4
    

    Der name ist, wie bereits im startpost angegeben, hartkodiert. Wenn ein Link helfen würde, würde es bei mir schon seit 2 tagen laufen 🙂

    muss eine boost-library so heißen wie man ihr beim kompilieren gesagt hat?

    Scheinbar ja. LD steigt da auf jedenfall aus und weigert sich beim programmstart die umbenannten libs zu verwenden.

    @Dravere danke. Das Problem ist, dass bjam --help im $BOOST_ROOT mir nichts sinnvolles ausgibt. Der gibt mir nur ganz allgemeine Optionen wie clean oder alles neubauen... Ich werds mal ausprobieren. //edit funktioniert auch nicht. die Versionsnummer wird direkt an den Namen angehangen, nicht an die Endung. Danke trotzdem 🙂



  • otze schrieb:

    Der name ist, wie bereits im startpost angegeben, hartkodiert. Wenn ein Link helfen würde, würde es bei mir schon seit 2 tagen laufen 🙂

    Bin nur ich zu doof, das zu kapieren? Der Name ist also hardkodiert, und weiter? Wieso hilft da ein Symlink nicht?

    Edit: Ok, habe

    LD steigt da auf jedenfall aus und weigert sich beim programmstart die umbenannten libs zu verwenden.

    übersehen.



  • Ich finde diese Zeile:

    ln -s libboost_filesystem-gcc44-mt-1_38.so libboost_filesystem-mt.so.4

    fasst sowohl Linux als auch Boost schön zusammen.


Anmelden zum Antworten