Как использовать llvm FormatVariadi c? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь использовать каркас 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})

Поэтому не должно быть никакой библиотеки.

...