Связывание с библиотекой , которая определяет недостающий символ ( -lboost_system
) является очевидным решением, но в данном конкретном случае Boost.System, ошибочная особенность в оригинальном дизайне делает его использовать boost::system::generic_category()
и boost::system::system_category()
без необходимости. Компиляция с флагом -DBOOST_SYSTEM_NO_DEPRECATED
отключает этот код и позволяет нескольким программам компилироваться без необходимости -lboost_system
(эта ссылка, конечно, все еще необходима, если вы явно используете некоторые функции библиотеки).
Начиная с Boost 1.66 и этого коммита , это поведение теперь является значением по умолчанию, поэтому, надеюсь, все меньше и меньше пользователей будут нуждаться в этом ответе.
Как заметил @AndrewMarshall, альтернативой является определение, BOOST_ERROR_CODE_HEADER_ONLY
которое включает версию кода только для заголовков. Это был обескуражен буста , как это может нарушить некоторые функциональные возможности . Однако, начиная с версии 1.69, по-видимому, по умолчанию используется только заголовок, что , предположительно, делает этот вопрос устаревшим.