Я пытаюсь скомпилировать проект С++, который широко использует стандарты С++ 11. Все было хорошо с помощью только -std = С++ 11, пока я не попытался использовать unordered_map, и MacOS просто не имеет заголовочного файла unordered_map в любом месте usr/include.
Я провел некоторое исследование и обнаружил, что использование -stdlib = libС++ исправит его (не уверенный, как это кажется мне волшебным, если включенный файл нигде в файловой системе). Конечно. Он скомпилирован хорошо, но компоновщик не может ссылаться на boost:: program_options, что моя программа также широко использует. Без -stdlib = libС++, улучшать ссылки отлично, но я теряю unordered_map.
Что мне делать, чтобы иметь последние возможности С++ 11 с компилятором Mac OS clang++ и по-прежнему иметь возможность ссылаться на дополнительные библиотеки (которые были созданы из источников на этом самом mac).
ps: все отлично работает в моем ящике для дуги
my makefile:
LIBS = -lboost_program_options CXXFLAGS = -stdlib = libС++ -std = С++ 11 -Wall -g OBJ = fastq.o fastq_reader.o main.o degenerate.o interleave.o supplement.o interval_utils.o interval.o interval_utils_test_tool.o
foghorn: $(OBJ) $(LINK.cc) -o [email protected]$^ $(LIBS)
Выход с использованием -stdlib = libС++
$make С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o fastq.o fastq.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o fastq_reader.o fastq_reader.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o main.o main.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o degenerate.o degenerate.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g
-c -o interleave.o interleave.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o supplement.o comple.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o interval_utils.o interval_utils.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o interval.o interval.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g -c -o interval_utils_test_tool.o interval_utils_test_tool.cpp С++ -stdlib = libС++ -std = С++ 11 -Wall -g
-o foghorn fastq.o fastq_reader.o main.o degenerate.o interleave.o comple.o interval_utils.o interval.o interval_utils_test_tool.o -lboost_program_options Undefined символы для архитектуры x86_64: "boost:: program_options:: to_internal (std:: __ 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 &) в main.o
... [clipped output for readability]
ld: символ не найден для архитектуры x86_64 clang: error: linker команда с кодом выхода 1 (используйте -v для вызова вызова): * [foghorn] Ошибка 1