问题
I've downloaded, built and added to the project the {fmt} 6.2.1 library on c++. I'm using Windows.
Problem is, the headers are recognized(Code:Blocks give me the auto-completion for them) but any function I try to use results in errors.
For example this code:
#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;
}
produces this error
||=== Build: Debug in test libreria fmt (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `ZN3fmt2v68internal16is_integral_typeENS1_4typeE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|736|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal18is_arithmetic_typeENS1_4typeE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|741|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v612format_errorC1EPKc':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|693|undefined reference to `vtable for fmt::v6::format_error'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12count_digitsEy':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|751|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_64'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|751|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_64'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12count_digitsEj':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|809|undefined reference to `fmt::v6::internal::basic_data<void>::zero_or_powers_of_10_32'|
obj\Debug\main.o||In function `ZN3fmt2v68internal11to_unsignedIiEENSt13make_unsignedIT_E4typeES4_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|266|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2510|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal19parse_format_stringILb0EcRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEEEvNS0_17basic_string_viewIT0_EEOT1_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2527|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2541|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2543|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12parse_arg_idIcNS1_10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcEEEEPKT_SK_SK_OT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v614format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcEEE15on_format_specsEPKcSF_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|3133|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v616visit_format_argINS0_13arg_formatterINS0_12buffer_rangeIcEEEENS0_20basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcEEEEDTclfp_Li0EEEOT_RKNS0_16basic_format_argIT0_EE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|1012|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal21parse_nonnegative_intIcRNS1_10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcEEEEiRPKT_SL_OT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal10id_adapterIRNS0_14format_handlerINS0_13arg_formatterINS0_12buffer_rangeIcEEEEcNS0_20basic_format_contextISt20back_insert_iteratorINS1_6bufferIcEEEcEEEEcE8on_errorEPKc':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2493|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v616visit_format_argIRNS0_8internal16custom_formatterINS0_20basic_format_contextISt20back_insert_iteratorINS2_6bufferIcEEEcEEEES9_EEDTclfp_Li0EEEOT_RKNS0_16basic_format_argIT0_EE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|1012|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v626basic_format_parse_contextIcNS0_8internal13error_handlerEE8on_errorEPKc':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|532|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEEclENS0_9monostateE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1836|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2342|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2382|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v620basic_format_contextISt20back_insert_iteratorINS0_8internal6bufferIcEEEcE8on_errorEPKc':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\core.h|1169|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal17handle_char_specsIcNS1_18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE17char_spec_handlerEEEvPKNS0_18basic_format_specsIT_EEOT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1280|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIfLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1713|undefined reference to `int fmt::v6::internal::format_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIdLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1713|undefined reference to `int fmt::v6::internal::format_float<double>(double, int, fmt::v6::internal::float_specs, fmt::v6::internal::buffer<char>&)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE5writeIeLi0EEEvT_NS0_18basic_format_specsIcEE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1694|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1703|undefined reference to `fmt::v6::internal::basic_data<void>::signs'|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.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>&)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE5writeEPKc':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1823|undefined reference to `fmt::v6::format_error::~format_error()'|
obj\Debug\main.o||In function `ZN3fmt2v68internal24handle_cstring_type_specIcNS1_18arg_formatter_baseINS0_12buffer_rangeIcEENS1_13error_handlerEE20cstring_spec_handlerEEEvT_OT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1291|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal22check_string_type_specIcNS1_13error_handlerEEEvT_OT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1296|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal23check_pointer_type_specIcNS1_13error_handlerEEEvT_OT0_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1301|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|2278|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal21parse_float_type_specINS1_13error_handlerEcEENS1_11float_specsERKNS0_18basic_format_specsIT0_EEOT_':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1268|undefined reference to `fmt::v6::internal::error_handler::on_error(char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal13decimal_pointIcEET_NS1_10locale_refE':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|831|undefined reference to `char fmt::v6::internal::decimal_point_impl<char>(fmt::v6::internal::locale_ref)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.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:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1928|undefined reference to `fmt::v6::internal::assert_fail(char const*, int, char const*)'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIiNS0_18basic_format_specsIcEEE8on_errorEv':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIjNS0_18basic_format_specsIcEEE8on_errorEv':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIxNS0_18basic_format_specsIcEEE8on_errorEv':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.h|1590|undefined reference to `fmt::v6::format_error::~format_error()'|
obj\Debug\main.o||In function `ZN3fmt2v68internal12basic_writerINS0_12buffer_rangeIcEEE10int_writerIyNS0_18basic_format_specsIcEEE8on_errorEv':|
D:\CodeBlocks\MinGW\include\fmt-6.1.2\include\fmt\format.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)) ===|
and the compiler points me to this section of core.h, in the second line
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;
}
It is the first time for me to use a library so I could have mistaken something while adding it. The procedure I've followed is to go on project->build options->linker settings and there I added the .lib files.
Thank you.
回答1:
You should link with the fmt library. For example, if you are using CMake it can be done with target_link_libraries:
target_link_libraries(<target> fmt)
来源:https://stackoverflow.com/questions/59348475/i-cant-use-fmt-library-headers-on-c