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?
-
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)
-
Ah, die Nummer ganz übersehen. Ist auch eher abnormal so eine Nummer
Aber sag mal, kannst du das Zeug nicht selber machen? Zum Beispiel malbjam --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.