À l'aide de c++11 dans MacOS X et compilé les bibliothèques Boost énigme

Je suis en train de compiler un projet c++ qui utilise c++11 normes largement. Tout allait bien avec à peu -std=c++11, jusqu'à ce que j'ai essayé d'utiliser unordered_map et MacOS simplement n'ont pas l'unordered_map fichier d'en-tête de n'importe où dans usr/include.

J'ai fait quelques recherches et trouvé que l'utilisation d'-stdlib=libc++ serait-il fixer (pas sûr de savoir comment, c'est comme de la magie pour moi, si le fichier à inclure est nulle part dans le système de fichiers). Il a certainement fait. Il a compilé bien, mais l'éditeur de liens ne peut pas le lien pour le boost::program_options que mon programme utilise de manière intensive. Sans -stdlib=libc++, boost des liens parfaitement, mais je perds le unordered_map.

Que dois-je faire pour avoir le dernier C++11 caractéristiques avec Mac OS clang++ compilateur et toujours être en mesure de relier les bibliothèques boost (qui ont été construit à partir des sources sur ce mac)

ps: tout fonctionne très bien dans mon arch linux

mon makefile:

LIBS = -lboost_program_options CXXFLAGS = -stdlib=libc++ -std=c++11
-Wall-g OBJ = fastq.o fastq_reader.o principal.o dégénérer.o interleave.o compléter.o interval_utils.o intervalle.o interval_utils_test_tool.o

de la corne de brume: $(OBJ) $(LINK.cc) -o $@ $^ $(LIBS)

La sortie à l'aide d'-stdlib=libc++

$ c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o fastq.o
fastq.rpc c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o
fastq_reader.o fastq_reader.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g
-c -o main.o main.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o dégénérer.o degenerate.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g

-c -o interleave.o interleave.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o compléter.o complement.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o interval_utils.o interval_utils.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o de l'intervalle.o interval.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g -c -o interval_utils_test_tool.o interval_utils_test_tool.cpp c++ -stdlib=libc++ -std=c++11 -Wall-g

-o de la corne de brume fastq.o fastq_reader.o principal.o dégénérer.o interleave.o compléter.o interval_utils.o intervalle.o interval_utils_test_tool.o
-lboost_program_options les symboles non définis pour l'architecture x86_64: "boost::program_options::to_internal(std::__1::basic_string, std::__1::allocator > const&)",
référencé à partir de:
std::__1::vector, std::__1::allocator >,
std::__1::allocator, std::__1::allocator > > >
boost::program_options::to_internal, std::__1::allocator >

(std::__1::vector, std::__1::allocator >,
std::__1::allocator, std::__1::allocator > > > const&)
dans la principale.o

  ... [clipped output for readability]

ld: symbole(s) ne se trouvent pas pour l'architecture x86_64 clang: erreur: l'éditeur de liens
la commande a échoué avec le code de sortie 1 (l'option-v pour voir invocation) faire: *
[corne] Erreur 1

  • J'ai la tête à /usr/include/c++/4.2.1/tr1/unordered_map est votre xcode jusqu'à ce jour? (Et vous êtes outils de ligne de commande jusqu'à ce jour)
  • installer boost avec homebrew à l'aide de la "--with-c++11" drapeau et d'être heureux.
  • c'est en fait un grand bout bamboon. Je endedup de l'installer à la main.
InformationsquelleAutor Carneiro | 2013-08-09