Probleme mit boost :: program_options auf OSX mit LLVM verbinden

8

Ich habe Probleme mit der Verbindungsphase in meinem C ++ - Programm aufgrund von Problemen mit Boost 1.49. Ich habe zu C ++ gewechselt ( -std=c++11 -libc=libc++ ), das funktioniert gut für einen anderen Code (der auch boost verwendet). Boost wurde mit Homebrew installiert mit:

%Vor%

Das Problem beginnt mit boost::program_options . Ich bekomme die Linkfehler wie folgt:

%Vor%

Das ist etwas merkwürdig, weil ein nm auf der verwendeten Bibliothek zeigt, dass das Symbol dort zu sein scheint:

%Vor%

Ich habe bereits versucht, Homebrew zu überreden, Boost mit clang statt gcc zu kompilieren, indem ich CXX und CXX_FLAGS vor der Installation entsprechend einstelle. Nicht sicher, ob es mir gelungen ist.

Zeiger sehr geschätzt.

    
Ion Tichy 18.06.2012, 11:26
quelle

2 Antworten

8

Sie müssen Boost mit clang und std11 Flags neu kompilieren, die libc ++ Bibliothek ist nicht binärkompatibel mit dem installierten libstdc ++ in OSX (sehr frühe Version von gcc vor dem Wechsel zu gpl3). Wenn Ihre Version von clang 3.1 oder älter ist, können Sie sie verwenden (ändern Sie andernfalls c ++ 11 in C ++ 0x für frühere Versionen).

%Vor%

Sie können natürlich beliebige davon ändern, außer

  

toolset = clang cxxflags="- std = c ++ 0x -stdlib = libc ++"

Dies sollte für Sie funktionieren.

    
dirvine 18.06.2012, 16:50
quelle
3

Ich möchte meine (mäßig schmerzhafte) Erfahrung mit Boost 1.54 unter Mac OS X 10.8.5 mit clang 5.0.0 teilen, wie es Xcode 5.0 liefert. Wenn Sie die C ++ 11 Funktionen haben möchten, ist es sehr wichtig, dass Sie mit clang++ kompilieren und verknüpfen, nicht mit clang .

Abbildung: Nehmen Sie das folgende einfache Programm:

%Vor%

Kann mit dem folgenden Befehl erstellt werden:

clang++ -std=c++11 -stdlib=libc++ clangstr.cc -o clangstr

jedoch, wenn Sie dies stattdessen versuchen:

clang -std=c++11 -stdlib=libc++ clangstr.cc -o clangstr

Dann erhalten Sie Linker-Fehler. Beachten Sie, dass die Hilfeseite clang angibt, dass die Sprache mit der Option -std= ausgewählt wurde, aber das ist eindeutig nicht genug.

Die Lektion ist, dass wir bjam mitteilen müssen, dass clang++ explizit verwendet wird, wenn Boost mit C ++ 11-Unterstützung kompiliert wird.

Nach dieser sehr nützliche Beitrag , Füge ich folgendes in mein tools/build/v2/user-config.jam :

ein %Vor%

Dann habe ich ./b2 clean ausgeführt, dann habe ich Boost mit dem folgenden Befehl erstellt:

%Vor%

Dies erstellt die 64-Bit-statischen und dynamischen Bibliotheken mit Multithreading-Unterstützung. Wenn Sie einen anderen Satz benötigen, ändern Sie den obigen Befehl entsprechend.

    
Laryx Decidua 17.10.2013 14:40
quelle

Tags und Links