Пов’язання з бібліотекою, яка визначає пропущений символ ( -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
яке дозволяє версію коду, призначена лише для заголовка. Це не відштовхувало Boost, оскільки це може порушити деякі функції. Однак, починаючи з 1,69, здається, лише заголовок став за замовчуванням , що, мабуть, робить це питання застарілим.