Я пытаюсь использовать каркас llvm для вывода форматированного текста с помощью функции llvm::formatv()
.
Например, я хочу вывести double
в llvm raw_ostream
, в основном используя этот код:
someStream << llvm::formatv("{0}", someDouble);
Я думаю, что я включаю правильные заголовки, чтобы это работало, очевидно, мне нужны и llvm/Support/raw_ostream.h
, и llvm/Support/FormatVariadic.h
. Кроме того, я попытался включить другие заголовки, например, llvm/Support/FormatAdapters.h
.
К сожалению, я получаю следующую ошибку при попытке построить:
Undefined symbols for architecture x86_64:
"typeinfo for llvm::detail::format_adapter", referenced from:
typeinfo for llvm::detail::provider_format_adapter<double> in libjuiceDiagnostics.a(Diagnostics.cpp.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
В чем может быть проблема? К сожалению, документация llvm не помогла мне с этой проблемой.
Если это имеет значение, я связываю библиотеки llvm следующим образом в моем CMakeLists.txt
:
set(LLVM_CONFIG_CMD "${LLVM_INSTALL_DIR}/bin/llvm-config")
execute_process(COMMAND ${LLVM_CONFIG_CMD} --libfiles
OUTPUT_VARIABLE LLVM_LIBS
OUTPUT_STRIP_TRAILING_WHITESPACE)
separate_arguments(LLVM_LIBS)
target_link_libraries(myTarget ${LLVM_LIBS})
Поэтому не должно быть никакой библиотеки.