Vincular a uma biblioteca que define o símbolo ausente ( -lboost_system
) é a solução óbvia, mas no caso particular de Boost.System, uma característica incorreta no design original o torna útil boost::system::generic_category()
e boost::system::system_category()
desnecessário. Compilar com o sinalizador -DBOOST_SYSTEM_NO_DEPRECATED
desativa esse código e permite que vários programas sejam compilados sem exigir -lboost_system
(esse link, é claro, ainda é necessário se você usar explicitamente alguns dos recursos da biblioteca).
A partir do Boost 1.66 e deste commit , esse comportamento agora é o padrão, então esperamos que cada vez menos usuários precisem desta resposta.
Como notado por @AndrewMarshall, uma alternativa é definir o BOOST_ERROR_CODE_HEADER_ONLY
que habilita uma versão apenas de cabeçalho do código. Isso foi desencorajado pelo Boost, pois pode quebrar algumas funcionalidades. No entanto, desde 1.69, apenas o cabeçalho parece ter se tornado o padrão , supostamente tornando esta questão obsoleta.