C++11 標準を広範囲に使用する C++ プロジェクトをコンパイルしようとしています。-std=c++11 だけですべてがうまくいっていましたが、unordered_map を使用しようとすると、MacOS が unordered_map ヘッダー ファイルを usr/include のどこにも持っていませんでした。
私はいくつかの調査を行い、 -stdlib=libc++ を使用するとそれが修正されることがわかりました(インクルードファイルがファイルシステムのどこにもない場合、これは魔法のように思えます)。確かにそうでした。コンパイルはうまくいきましたが、リンカは、私のプログラムでも広く使用されている boost::program_options にリンクできません。-stdlib=libc++ を使用しないと、リンクが完全に強化されますが、unordered_map が失われます。
Mac OSのclang ++コンパイラで最新のC ++ 11機能を使用し、ブーストライブラリ(このMacのソースからビルドされたもの)にリンクできるようにするにはどうすればよいですか
ps: Arch Linux ボックスではすべて正常に動作します
私のメイクファイル:
LIBS = -lboost_program_options CXXFLAGS = -stdlib=libc++ -std=c++11 -Wall -g OBJ = fastq.o fastq_reader.o main.o degenerate.o interleave.o Complement.o interval_utils.o interval.o interval_utils_test_tool.o
フォグホーン: $(OBJ) $(LINK.cc) -o $@ $^ $(LIBS)
-stdlib=libc++ を使用した出力
$ make c++ -stdlib=libc++ -std=c++11 -Wall -g -c -o fastq.o fastq.cpp 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 degenerate.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 補数.o 補数.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 interval.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 foghorn fastq.o fastq_reader.o main.o degenerate.o interleave.o Complement.o interval_utils.o interval.o interval_utils_test_tool.o -lboost_program_options アーキテクチャ x86_64 の未定義シンボル: __1::basic_string, std::__1::allocator > const&)"、次から参照: 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&) in main.o
... [clipped output for readability]
ld: アーキテクチャ x86_64 のシンボルが見つかりません clang:エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)