我正在尝试在我的c ++项目中使用fmt(https://github.com/fmtlib/fmt)格式化头库。
我已经将路径添加到主文件顶部的核心头文件中,如下所示:
#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)的方式。任何帮助将不胜感激!
答案 0 :(得分:0)
您应链接到fmt
库或使用optional header-only mode。
例如,如果您有文件test.cc
:
#include <fmt/core.h>
int main() {
fmt::print("The answer is {}.", 42);
}
您可以编译它并将其与gcc链接:
g++ -std=c++11 test.cc -lfmt
答案 1 :(得分:0)
来自 @vitaut's answer 中的评论,如果您更改 #include
行:
#include "../third_party/fmt/core.h"
为此:
#include "../third_party/fmt/format.h"
它会导致代码以“仅标头模式”进行编译,并且您无需更改构建过程即可在 {fmt} 库中进行编译和链接。