OGDF for OS X (El Capitan)
OGDF ist ein freiverfügbares Graph-Zeichen-Programmiergerüst. Auf dieser Seite wird kurz die Konfiguration, die für das OS X notwendig ist, um OGDF zu bauen, gezeigt.
Schritte:
- Herunterladen von OGDF und entpacken in das Installationsverzeichnis
- Installation von gcc 4.9 und Festlegung als Standard-gcc-Compiler
- Konfigurieren und bauen von OGDF
Standard-gcc-Compiler
Mithilfe von MacPorts kann der Compiler wie folgt installiert werden.
$ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install gcc49 $ sudo port select --set gcc mp-gcc49 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin15/4.9.3/lto-wrapper Target: x86_64-apple-darwin15 Configured with: /opt/local/var/macports/build/_opt_mports_dports_lang_gcc49/gcc49/work/gcc-4.9.3/configure --prefix=/opt/local --build=x86_64-apple-darwin15 --enable-languages=c,c++,objc,obj-c++,lto,fortran,java --libdir=/opt/local/lib/gcc49 --includedir=/opt/local/include/gcc49 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-4.9 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-4.9 --with-gxx-include-dir=/opt/local/include/gcc49/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-isl=/opt/local --disable-isl-version-check --with-cloog=/opt/local --disable-cloog-version-check --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --with-pkgversion='MacPorts gcc49 4.9.3_0' --with-build-config=bootstrap-debug Thread model: posix gcc version 4.9.3 (MacPorts gcc49 4.9.3_0) $ sudo port select --list gcc Available versions for gcc: mp-gcc49 (active) mp-gcc5 none
Konfiguration von OGDF
Im Hauptverzeichnis von OGDF
befindet sich eine makeMakefile.config
Datei, die aus vier Teilen besteht. Für die Konfiguration sind im Wesentlichen nur der [GENERAL]
und [COIN]
interessant. Erster legt fest mit welchem Compiler und welchen Compiler Optionen OGDF
gebaut wird.
Dabei ist es empfehlenswert den gcc 4.9 zu verwenden, der unter /opt/local/bin/g++-mp-4.9
zufinden ist. Die Option -stdlib=…
ist unter dem gcc 4.9 nicht verfügbar. Die Standardbibliothek von gcc 4.9 ist libstdc++
.
Compiler: g++-mp-5
, g++-mp-4.9
nicht compilierbar mit Apple LLVM version 7.3.0 (clang-703.0.31)
[GENERAL] #********************************************************** compilerCommand = /opt/local/bin/g++-mp-4.9 # MAC USERS: if building fails, try the following line: #compilerCommand = g++ -stdlib=libstdc++ ... #* command used to create a shared library sharedlibCommand = /opt/local/bin/g++-mp-4.9 ...
OGDF ist nicht konfigurierbar mit clang
und libc++
. Dabei wird vom makeMakefile.sh
folgender Fehler geworfen:
In file included from test/fileformats_test.cpp:44: test/gtest/gtest.h:1561:13: fatal error: 'tr1/tuple' file not found # include <tr1/tuple> // NOLINT ^ 1 error generated. Traceback (most recent call last): File "makeMakefile.py", line 360, in <module> objsTest = Walk('./test') File "makeMakefile.py", line 277, in Walk targetAndDepend = subprocess.check_output(' '.join([compilerCommand, compilerFlags, ogdfFlags, '-MM', fullname]), shell=True) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 574, in check_output raise CalledProcessError(retcode, cmd, output=output) subprocess.CalledProcessError: Command 'clang -I./include -I/Library/gurobi652/mac64/include -MM test/fileformats_test.cpp' returned non-zero exit status 1
Weiterhin besteht die Möglichkeit, den externen Solver zu ändern. Wir verwenden beispielsweise Gurobi. Unter OS X ist das Standard-Installationsverzeichnisse /Library/gurobi<VERSION>/<OS>/
.
[COIN] #********************************************************** ... #========================================================== #* Select your solvers for OGDF and ABACUS #* #* internal solvers (always available): #* CLP: Coin's CLP solver #* SYM: Coin's Symphony #* #* external solvers (must be installed) #* CPX: IBM ILOG CPLEX #* GRB: Gurobi Optimizer #* #* Default solver (one of CLP, SYM, CPX, GRB) defaultSolver = GRB #* External solvers (separated by semicolon) externalSolvers = GRB #* Additional include directories (separated by semicolon) for external solvers solverIncludes = /Library/gurobi<VERSION>/<OS>/include
Entweder man verwendet Gurobi mit libc++
als Standardbibliothek
#* Additional linker options to use an external default solver. Only needed to link test suite. solverLDFlags = -L/Library/gurobi<VERSION>/<OS>/lib -lgurobi_c++ -lgurobi<VERSION>
oder Gurobi mit libstdc++
Standardbibliothek, welches seit Gurobi 6.5.0 existiert
solverLDFlags = -L/Library/gurobi<VERSION>/<OS>/lib -lgurobi_stdc++ -lgurobi<VERSION>
Am Ende muss dann noch das makeMakefile.sh
Skript ausgeführt werden.
$ ./makeMakefile.sh
Bauen von OGDF
$ make
OGDF kann nicht mit clang
und libstdc++
gebaut werden, da man ansonsten Linkerfehler bekommt. Dabei wird von make
folgender Fehler geworfen (Compiler Ausgabe):
clang -stdlib=libstdc++ -o test/test-release _release/test/fileformats_test.o _release/test/generators_test.o _release/test/gtest/gtest-all.o _release/test/main.o _release/test/regression-tests/reg-energy-based.o _release/test/regression-tests/reg-lca.o _release/test/regression-tests/reg-main.o _release/test/regression-tests/reg-planar-layout.o _release/test/regression-tests/reg-planarity-test.o _release/test/regression-tests/reg-planarization-layout.o _release/test/regression-tests/reg-sugiyama.o _release/libCOIN.a _release/libOGDF.a -pthread -L_release -lOGDF -lCOIN -L/Library/gurobi652/mac64/lib -lgurobi_stdc++ -lgurobi65 ... Undefined symbols for architecture x86_64: ... ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [test/test-release] Error 1