Как использовать только библиотеку заголовков fmt без получения «Неопределенные символы для архитектуры x86_64» - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь использовать библиотеку заголовков форматирования fmt (https://github.com/fmtlib/fmt)) в моем проекте c ++.

Я добавил путь к заголовочному файлу ядра в верхней части основного файла.вот так:

#include "../third_party/fmt/core.h"

но когда я пытаюсь вызвать любую функцию, например:

string message = fmt::format("The answer is {}", 42);

я получаю следующую ошибку:

Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > fmt::v5::internal::vformat<char>(fmt::v5::basic_string_view<char>, fmt::v5::basic_format_args<fmt::v5::buffer_context<char>::type>)", referenced from:
      std::__1::basic_string<std::__1::enable_if<internal::is_string<char [17]>::value, fmt::v5::internal::char_t<char [17]>::type>::type, std::__1::char_traits<std::__1::enable_if<internal::is_string<char [17]>::value, fmt::v5::internal::char_t<char [17]>::type>::type>, std::__1::allocator<std::__1::enable_if<internal::is_string<char [17]>::value, fmt::v5::internal::char_t<char [17]>::type>::type> > fmt::v5::format<char [17], int>(char const (&) [17], int const&) in main.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)
make[2]: *** [main] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2

Я не уверен, как это использовать, так как в прошлом я использовал другие библиотеки заголовков, такие как cxxopts. Любая помощь будет признательна!

1 Ответ

0 голосов
/ 23 июня 2019

Вы должны установить связь с библиотекой fmt или использовать дополнительный режим только для заголовков .

Например, если у вас есть файл test.cc:

#include <fmt/core.h>

int main() {
  fmt::print("The answer is {}.", 42);
}

Вы можете скомпилировать и связать его с помощью gcc:

g++ -std=c++11 test.cc -lfmt
...