我不能在 c++ 上使用 fmt 库标头

I can't use fmt library headers on c++

本文关键字:fmt 不能 c++      更新时间:2023-10-16

我已经下载、构建并添加到项目中了 c++ 上的 {fmt} 6.2.1 库。我正在使用Windows。

问题是,标头被识别(Code:Blocks为我提供了它们的自动完成(,但是我尝试使用的任何函数都会导致错误。

例如,此代码:

#include <iostream>
#include<fmt-6.1.2/include/fmt/core.h>
#include<fmt-6.1.2/include/fmt/format.h>
int main()
{
auto msg1 = fmt::format("The answer is {}", 42);
return 0;
}

产生此错误

||=== Build: Debug in test libreria fmt (compiler: GNU GCC Compiler) ===|
objDebugmain.o||In function `ZN3fmt2v68internal16is_integral_typeENS1_4typeE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|736|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal18is_arithmetic_typeENS1_4typeE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|741|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v612format_errorC1EPKc':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|693|undefined reference to `vtable for fmt::v6::format_error'|
objDebugmain.o||In function `ZN3fmt2v68internal12count_digitsEy':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|751|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_64'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|751|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_64'|
objDebugmain.o||In function `ZN3fmt2v68internal12count_digitsEj':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|809|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_32'|
objDebugmain.o||In function `ZN3fmt2v68internal11to_unsignedIiEENSt13make_unsignedIT_E4typeES4_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|266|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZZN3fmt2v68internal19parse_format_stringILb0EcRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEvNS0_17basic_string_viewIT0_EEOT1_EN10pfs_writerclEPKcSN_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2510|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal19parse_format_stringILb0EcRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEvNS0_17basic_string_viewIT0_EEOT1_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2527|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2541|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2543|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal12parse_arg_idIcNS1_10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcEEEEPKT_SK_SK_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v614format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcEEE15on_format_specsEPKcSF_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|3133|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v616visit_format_argINS0_13arg_formatterINS0_12buffer_rangeIcEEEENS0_20basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcEEEEDTclfp_Li0EEEOT_RKNS0_16basic_format_argIT0_EE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|1012|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal21parse_nonnegative_intIcRNS1_10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcEEEEiRPKT_SL_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcE8on_errorEPKc':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2493|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v616visit_format_argIRNS0_8internal16custom_formatterINS0_20basic_format_contextISt20back_insert_iteratorINS2_6bufferIcEEEcEEEES9_EEDTclfp_Li0EEEOT_RKNS0_16basic_format_argIT0_EE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|1012|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v626basic_format_parse_contextIcNS0_8internal13error_handlerEE8on_errorEPKc':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|532|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEEclENS0_9monostateE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1836|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal11parse_alignIcRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEEEPKT_SJ_SJ_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2342|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal11parse_widthIcRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEEEPKT_SJ_SJ_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2382|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v620basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcE8on_errorEPKc':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtcore.h|1169|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal17handle_char_specsIcNS1_18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE17char_spec_handlerEEEvPKNS0_18basic_format_specsIT_EEOT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1280|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIfLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1704|undefined reference to `int fmt::v6::internal::snprintf_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1713|undefined reference to `int fmt::v6::internal::format_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIdLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1704|undefined reference to `int fmt::v6::internal::snprintf_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1713|undefined reference to `int fmt::v6::internal::format_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIeLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1704|undefined reference to `int fmt::v6::internal::snprintf_float<long double>(long double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1713|undefined reference to `int fmt::v6::internal::format_float<long double>(long double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
objDebugmain.o||In function `ZN3fmt2v68internal18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE5writeEPKc':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1823|undefined reference to `fmt::v6::format_error::~format_error()'|
objDebugmain.o||In function `ZN3fmt2v68internal24handle_cstring_type_specIcNS1_18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE20cstring_spec_handlerEEEvT_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1291|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal22check_string_type_specIcNS1_13error_handlerEEEvT_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1296|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal23check_pointer_type_specIcNS1_13error_handlerEEEvT_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1301|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal21parse_nonnegative_intIcRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEEEiRPKT_SJ_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal12parse_arg_idIcNS1_13width_adapterIRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEcEEEEPKT_SL_SL_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal12parse_arg_idIcNS1_17precision_adapterIRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEcEEEEPKT_SL_SL_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal21parse_float_type_specINS1_13error_handlerEcEENS1_11float_specsERKNS0_18basic_format_specsIT0_EEOT_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1268|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal13decimal_pointIcEET_NS1_10locale_refE':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|831|undefined reference to `char fmt::v6::internal::decimal_point_impl<char>(fmt::v6::internal::locale_ref)'|
objDebugmain.o||In function `ZN3fmt2v68internal21parse_nonnegative_intIcRNS1_13width_adapterIRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEcEEEEiRPKT_SM_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal21parse_nonnegative_intIcRNS1_17precision_adapterIRNS1_13specs_checkerINS1_13specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEENS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEcEEEEiRPKT_SM_OT0_':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIiNS0_18basic_format_specsIcEEE8on_errorEv':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIjNS0_18basic_format_specsIcEEE8on_errorEv':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIxNS0_18basic_format_specsIcEEE8on_errorEv':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
objDebugmain.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIyNS0_18basic_format_specsIcEEE8on_errorEv':|
D:CodeBlocksMinGWincludefmt-6.1.2includefmtformat.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|

编译器将我指向 core.h 的这一部分,在第二行

FMT_CONSTEXPR bool is_integral_type(type t) {
FMT_ASSERT(t != named_arg_type, "invalid argument type");
return t > none_type && t <= last_integer_type;
}

这是我第一次使用库,所以我在添加时可能会弄错一些东西。 我遵循的过程是继续项目>构建选项>链接器设置,然后在那里添加了 .lib 文件。

谢谢。

您应该链接到 fmt 库。例如,如果您使用的是CMake,则可以使用以下target_link_libraries来完成:

target_link_libraries(<target> fmt)