OpenBSD, Clang und C++11

kraileth

Steht noch ganz am Anfang
Moin zusammen!

Hat jemand Erfahrung mit Clang und dem C++11-Standard unter OpenBSD? Denn ich habe da leider so meine Schwierigkeiten und nachdem ich nicht wirklich weiterkomme, muß ich jetzt einfach mal fragen.

Konkret: Ich wollte gerne die Funktion stoi() nutzen, die C++ erst ab diesem Standard anbietet. Leider ist OpenBSDs Systemkompiler steinalt - und auch wenn ich den Grund dafür nachvollziehen kann, bleibt das ein Problem, denn von einem Kompiler aus dem Jahr 2007 kann man wohl nicht mit Recht Features erwarten, die 2011 standardisiert wurden...

Daher dachte ich, ich versuche es mal mit clang++, immerhin gibt's den ja auch für OpenBSD und er ist mir an sich recht sympathisch. Leider benutzt er auch die stdlibc++ von GCC und Clangs libc++ habe ich im Portsbaum nicht gefunden. Eine Recherche ergab dann, daß sie für OpenBSD wohl noch nicht portiert ist.

Also neueren GCC versuchen. 4.9 installiert, herausgefunden, daß ich dafür zur Unterscheidung vom Systemkompiler eg++ aufrufen muß. Meckert auch, daß er nichts von stoi() wisse, obwohl <string> eingebunden ist. Wenn ich den Kompiler aufrufe und explizit angebe, daß der neuere Standard verwendet werden soll (-std=c++11), dann ist GCC glücklich - und mein Programm funktioniert erstmal.

Nun würde ich aber aus Interesse gerne wissen, wie ich clang++ anstatt eg++ verwenden kann. Ich nehme an, daß der Kompiler die stdlibc++ des Systems verwendet und nicht die neuere des zusätzlich installierten neueren GCC. Für Tips, wie man in diesem Fall vorgeht, wäre ich dankbar.
 
Bei GCC gibt es die Option -nostdlib und ich denke die gibt es dann auch bei clang. Ich nehme an dann mußt du die libc manuell einbinden. Ich meine mich zu erinnern dass es auch die Option -stdlib= gibt/gab, kann da aber nichts konkretes finden. Wäre aber evtl. einen Versuch wert. Nein, Erfahrungen habe ich damit nicht ...
 
Guten Morgen kraileth,

ich habe gerade versucht, etwas brauchbares zu deiner Frage zu finden, und bin auf folgender Seite gelandet:
http://stackoverflow.com/questions/...c-4-7-clang-error-out-while-gcc-compiles-fine

eventuell sind folgende 2 Möglichkeiten hilfreich:

You need to rebuild clang, using --with-gcc-toolchain to tell it where to find the GCC headers and libs. You might be able to override the paths for your existing installation with very careful use of lots of -I and -L options but you need to override all the relevant paths. Compile with gcc -v to see all the standard search directories GCC uses, which you'd also need to tell Clang to use. Even then it might not work (clang has some hardcoded paths that are set when you install it and I don't know if they can be overridden)

oder: (die unsaubere? Variante: )

-I/usr/local/lib/gcc46/include/c++ \
-I/usr/local/lib/gcc46/include/c++/x86_64-portbld-freebsd9.0 \
-L/usr/local/lib/gcc46

mit deiner gcc Version und deiner Systemkonfiguration.

Gruß ghostfish
 
Zurück
Oben