osmium-tool auf opensuse 42.3 installieren

Ich folge der Installationsanleitung.

Ich habe ein Verzeichnis work erstellt und die drei git-Aufrufe haben dort dann drei Verzeichnisse (libosmium, osmium-tool, protozero) angelegt.

Dann heißt es, dass ein Verzeichnis build angelegt werden soll. Leider kann ich aus der Anleitung nicht erkennen, ob das unterhalb von work oder neben work angelegt werden soll. Ich habe es neben work angelegt.

Im Verzeichnis build starte ich dann entsprechend der Anleitung cmake …. Leider kommt da die Fehlermeldung

CMake Error: The source directory "/home/hfst/bin/osmosis" does not appear to contain CMakeLists.txt.

was ja zutrifft.

An welcher Stelle habe ich die Anleitung falsch verstanden?

Build sollte unterhalb von work liegen.

Ok, wenn man die Anleitung grade runter liest dann liegt work unterhalb von build. Ich hab’s geändert. Allerdings funktioniert’s immer noch nicht, weil in work ja auch kein CMakeLists.txt liegt.

Dann fehlen dort die sources vom osmium-tool, dort findet sich diese Datei.

Aber irgendwie passt das nicht zu den Schritten in travis.yml

Willst Du das gern selbst machen oder nur haben? Falls letzteres:

Wenn Du im Yast als Installationsquelle

http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.3/

hinzufügst, kannst Du das Paket libosmium-devel per Yast installieren.

Hallo,

das Build-Verzeichnis muss im Verzeichnis osmium-tool liegen. libosmium und protozero musst du nicht separat kompilieren, da die beiden Header-only-Bibliotheken sind. Also:


WORKDIR=$(pwd)
cd osmium-tool
mkdir build
cmake ..

CMake wird das Osmium-Verzeichnis und das Protozero-Verzeichnis nicht finden. Daher empfehle ich dir cmake-curses-gui (so heißt das Paket unter Debian, keine Ahnung, wie das Programm namens ccmake unter OpenSUSE heißt). Dann kannst du mit

ccmake ..

die fehlenden Variablen (OSMIUM_INCLUDE_DIR und PROTOZERO_INCLUDE_DIR) setzen. OSMIUM_INCLUDE_DIR dürfte dann $WORKDIR/libosmium/include sein und PROTOZERO_INCLUDE_DIR dürfte dann $WORKDIR/protozero/include sein.

Wenn du die Variablen in ccmake gesetzt hast (Vorsicht, nicht das Vim-Kommando ESC verwenden ;)), drückst du C und, wenn kein Fehler aufgetreten ist, G. Danach kannst du es mit “make” kompilieren. Falls du ein paar Kerne übrig hast, sei dir “make -j 4” (oder auch mehr oder weniger) ans Herz gelegt.

Die CMake-Variablen heißen u.U. leicht anders, ich habe diese Antwort gerade auswendig getippt, weil ich andauernd mit Libosmium (und manchmal auch an) arbeite.

Viele Grüße

Michael

hmmm … wenn ich der Anleitung folge wird ein Verzeichnis work/osmium-tool angelegt. Und dort liegt dann auch eine/die CMakeLists.txt.

Die Anleitung ist geringfügig unvollständig und bekommt gleich noch ein Pull-Request.

Cmake sollte doch libosmium automatisch finden, wenn es im Osmium-Tool Verzeichnis liegt, oder? (Bin gerade ohne System)

Die Struktur wäre dann:

Osmium-Tool

  • build
  • libosmium
  • Protozero

Ja, du hast Recht. Schließlich steht im find-osmium.cmake ja auch ein “…/libosmium”.

Wenn ich der Anleitung folge ist die Struktur:


.
└── work
    ├── build
    ├── libosmium
    ├── osmium-tool
    └── protozero

Habe ich auch probiert, aber: Da bekomme ich (erwartungsgemäß) “nur” die hpp-Dateien aber nicht das osmium-tool

So, jetzt habe ich das build im osmium-tool angelegt. Also so


.
└── work
    ├── libosmium
    │   ├── benchmarks
    │   ├── cmake
    │   ├── doc
    │   ├── examples
    │   ├── include
    │   └── test
    ├── osmium-tool
    │   ├── build <-----------------------
    │   ├── cmake
    │   ├── export-example-config
    │   ├── extract-example-config
    │   ├── include
    │   ├── man
    │   ├── scripts
    │   ├── src
    │   ├── test
    │   └── zsh_completion
    └── protozero
        ├── bench
        ├── cmake
        ├── doc
        ├── include
        ├── test
        └── tools

Wenn ich in build das cmake … aufrufe läuft schon einiges. Aber es gibt Fehler


...
/usr/bin/cc       CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o  -o cmTC_a86de -rdynamic
CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o: In Funktion »main«:
CheckSymbolExists.c:(.text+0x16): Warnung: undefinierter Verweis auf »pthread_create«
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_a86de.dir/build.make:97: recipe for target 'cmTC_a86de' failed
gmake[1]: *** [cmTC_a86de] Error 1
gmake[1]: Leaving directory '/home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_a86de/fast' failed
gmake: *** [cmTC_a86de/fast] Error 2

...

Aus dem Schnipsel allein werde ich nicht schlau. Könntest du bitte die gesamte Ausgabe uns zeigen?

Hast du alle erforderlichen Abhängigkeiten von Libosmium installiert?

  • cmake, make OK
  • google Protokollbuffer brauchen wir nicht N.A.
  • OSMPBF brauchen wir nicht N.A.
  • Protozero >= 1.5.1 habe ich aus dem GIT geholt, aber nichts gemacht ???
  • utfcpp habe ich nachinstalliert (heißt bei Opensuse übrigens utfcpp-devel aber es geht immer noch nicht OK
  • libexpat-devel OK
  • zlib-devel OK
  • boost siehe unten
  • Google Sparsehash (steht nicht im Readme!) heißt bei suse sparsehash-devel
  • gdal steht nicht im Readme
  • Geos steht nicht im Readme
  • Proj.4 steht nicht im Readme
  • Doxygen steht nciht im Readme

Jetzt zum boost. Da kennt opensuse 42.3:

  • “boost-devel” 1.54.0-15.15
  • “boost_1_58_0-devel” 1.58.0-8.1
  • “boost_1_61_-devel” 1.61.0-4.2
    was soll ich da installieren?

Hier noch CMakeError.log


Determining if the pthread_create exist failed with the following output:
Change Dir: /home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/gmake" "cmTC_a86de/fast"
/usr/bin/gmake -f CMakeFiles/cmTC_a86de.dir/build.make CMakeFiles/cmTC_a86de.dir/build
gmake[1]: Entering directory '/home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o
/usr/bin/cc     -o CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o   -c /home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c
Linking C executable cmTC_a86de
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a86de.dir/link.txt --verbose=1
/usr/bin/cc       CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o  -o cmTC_a86de -rdynamic
CMakeFiles/cmTC_a86de.dir/CheckSymbolExists.c.o: In Funktion »main«:
CheckSymbolExists.c:(.text+0x16): Warnung: undefinierter Verweis auf »pthread_create«
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_a86de.dir/build.make:97: recipe for target 'cmTC_a86de' failed
gmake[1]: *** [cmTC_a86de] Error 1
gmake[1]: Leaving directory '/home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_a86de/fast' failed
gmake: *** [cmTC_a86de/fast] Error 2

File /home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
/* */
#include <pthread.h>
int main(int argc, char** argv)
{
  (void)argv;
#ifndef pthread_create
  return ((int*)(&pthread_create))[argc];
#else
  (void)argc;
  return 0;
#endif
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/gmake" "cmTC_6a639/fast"
/usr/bin/gmake -f CMakeFiles/cmTC_6a639.dir/build.make CMakeFiles/cmTC_6a639.dir/build
gmake[1]: Entering directory '/home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_6a639.dir/CheckFunctionExists.c.o
/usr/bin/cc    -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_6a639.dir/CheckFunctionExists.c.o   -c /usr/share/cmake/Modules/CheckFunctionExists.c
Linking C executable cmTC_6a639
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a639.dir/link.txt --verbose=1
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create    CMakeFiles/cmTC_6a639.dir/CheckFunctionExists.c.o  -o cmTC_6a639 -rdynamic -lpthreads
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: -lpthreads kann nicht gefunden werden
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_6a639.dir/build.make:97: recipe for target 'cmTC_6a639' failed
gmake[1]: *** [cmTC_6a639] Error 1
gmake[1]: Leaving directory '/home/hfst/bin/osmosis/work/osmium-tool/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_6a639/fast' failed
gmake: *** [cmTC_6a639/fast] Error 2

Lt. https://travis-ci.org/osmcode/osmium-tool/jobs/362339500#L459 wird Boost >= 1.55 benötigt.

dass ich >= 1.55 brauche steht auch im Readme. Aber damit weiß ich noch nicht, ob

  • “boost_1_58_0-devel” 1.58.0-8.1 oder
  • “boost_1_61-devel” 1.61.0-4.2
    die richtige ist.

Willst du eigentlich nur das Tool nutzen oder hast du mehr vor?

Würde mal sagen, keine der beiden ist falsch :slight_smile: such dir eine der beiden aus. Das hängt natürlich auch davon ab, was ansonsten so auf dem System benötigt wird.