Hallo,
bisher habe ich hier nur mit gelesen und von den guten Beiträgen profitiert.
Da ich die hier geschilderte Problematik kenne, dachte ich mir, ich teile mein Wissen hierzu mal. Vielleicht hilft es ja. Vorsicht es ist etwas länglich.
Ich selbst benutze ein Ubuntu 20.04.2 LTS System. Das hier beschriebene Vorgehen dürfte sich aber auf andere Systeme übertragen lassen.
Ich selbst vermeide es gerne neue Libraries, die ich zum Entwickeln brauche, hier z.B. für QMS, einfach so in mein Produktivsystem einzuspielen und diese mit den bestehen alten Libraries zu vermischen. Wenn es geht, lasse ich dies bleiben.
Die Idee ist, diese einfach nicht ins System, sondern in ein anderes Verzeichnis einzuspielen und sie von dort zu benutzen.
Im folgenden beziehe ich mich auf die Anleitung unter https://github.com/Maproom/qmapshack/wiki/BuildUbuntuPROJ8 und beschreibe wie man diese modifiziert benutzen kann um die Idee umzusetzen.
Ich fange ab Install PROJ version 8 an und gehe davon aus, der Rest ist passend auf dem System installiert. Z.B. weil man QMS 1.15.2 schon mal gebaut hat.
Ich benutze hier im folgenden als Präfix des neuen Installationsverzeichnisses immer /home/tormet/QMSDEVDIR/usr
Habe ich für das Verzeichnis Schreibrechte, brauche ich natürlich auch kein sudo beim Installieren.
(1) Install PROJ version 8
So wie es da steht nur eben mit -DCMAKE_INSTALL_PREFIX=/home/tormet/QMSDEVDIR/usr
(2) Install GDAL
Hier muss man den configure Aufruf anpassen um keinen Konflikt mit der System libproj.so Library zu kriegen.
./configure --prefix=/home/tormet/QMSDEVDIR/usr --without-libtool --with-proj=/home/tormet/QMSDEVDIR/usr -with-geotiff=internal
Rest wie es das steht.
Hintergrund: Die libgeotiff.so vom System bringt eine Abhängigkeit zur libproj.so vom System mit und damit kriegt man den Konflikt, das sowohl libproj.so.15 (alt) als auch libproj.so.22 (neu) benötigt wird.
tormet:~$ ldd /lib/x86_64-linux-gnu/libgeotiff.so | grep libpro
libproj.so.15 => /lib/x86_64-linux-gnu/libproj.so.15 (0x00007fa4f822e000)
Im Prinzip ist das der "schwierige" Schritt, wenn man die Idee mit dem eigenen Verzeichnis umsetzen möchte. Der Rest funktioniert glücklicherweise kanonisch ohne das man sich Gedanken machen muss. Das Problem ist hier die versteckte Abhängigkeit zur System libproj.so, die durch das Linken mit der libgeotiff.so aus dem System entsteht.
(3) Install QUAZIP
So wie es da steht nur eben mit -DCMAKE_INSTALL_PREFIX=/home/tormet/QMSDEVDIR/usr
(4) Install Routino
Dies wäre bei mir nicht nötig. Routino vom System tut es.
Der Vollständigkeit halber habe ich es trotzdem gemacht.
Ich ändere natürlich die Zeile 48 auf: prefix=/home/tormet/QMSDEVDIR/usr
(5) Install QMapShack
Da ich die vorherigen Pakete nicht ins System eingespielt habe, muss man hier beim Konfigurieren mit ccmake etwas mehr tun.
ccmake ../QMapShack -DCMAKE_INSTALL_PREFIX=/home/tormet/QMSDEVDIR/usr -DGDAL_CONFIG=/home/tormet/QMSDEVDIR/usr/bin/gdal-config -DGDAL_INCLUDE_DIR=/home/tormet/QMSDEVDIR/usr/include -DGDAL_LIBRARY=/home/tormet/QMSDEVDIR/usr/lib/libgdal.so -DLIBROUTINO_LIBRARY=/home/tormet/QMSDEVDIR/usr/lib/libroutino.so -DROUTINO_INCLUDE_DIR=/home/tormet/QMSDEVDIR/usr/include -DROUTINO_XML_PATH=/home/tormet/QMSDEVDIR/usr/share/routino
Automatisch werden bei mir bereits:
QuaZip-Qt5_dir: /home/tormet/Software/Linux/QMSDEVDIR/usr/lib/cmake/QuaZip-Qt5-1.1
PROJ_DIR: /home/tormet/QMSDEVDIR/usr/lib/cmake/proj
gesetzt.
Möchte man auf Nummer sicher gehen kann man diese im ccmake Aufruf natürlich auch noch per Hand setzen.
Der Rest so wie es da steht.
Jetzt habe ich ein aktuelles QMS ohne mein System "verändert" zu haben.
Startet man nun QMS direkt aus dem build_QMapShack Verzeichnis mit ./bin/qmapshack funktioniert es sofort.
Da es keine Konflikte mit unterschiedlichen libproj.so Libraries gibt, stürzt QMS beim Beenden auch nicht mehr ab.
Z.B. mit Fehlermeldungen im Terminal wie:
double free or corruption (out)
Aborted (core dumped)
Möchte man es aus dem Installationverzeichnis heraus starten, muss noch der LD_LIBRRAY_PATH gesetzt werden. In einer Bash bei mir z.B. mit:
(export LD_LIBRARY_PATH=/home/tormet/QMSDEVDIR/usr/lib:; /home/tormet/QMSDEVDIR/usr/bin/qmapshack & )
Ich denke je nachdem wie ihr es bei euch einbinden wollt, werdet ihr hier schon das passende für euch finden.
Vielleicht hilft das ja einigen,
Torsten