Liên kết với một thư viện xác định ký hiệu bị thiếu ( -lboost_system
) là giải pháp rõ ràng, nhưng trong trường hợp cụ thể của Boost.System, một sai sót trong thiết kế ban đầu khiến nó được sử dụng boost::system::generic_category()
và boost::system::system_category()
không cần thiết. Biên dịch với cờ sẽ -DBOOST_SYSTEM_NO_DEPRECATED
vô hiệu hóa mã đó và cho phép một số chương trình biên dịch mà không yêu cầu -lboost_system
(liên kết đó tất nhiên vẫn cần thiết nếu bạn sử dụng rõ ràng một số tính năng của thư viện).
Bắt đầu từ Boost 1.66 và cam kết này , hành vi này hiện là mặc định, vì vậy hy vọng ngày càng ít người dùng cần câu trả lời này.
Như đã nhận thấy bởi @AndrewMarshall, một giải pháp thay thế là xác định BOOST_ERROR_CODE_HEADER_ONLY
cái nào cho phép phiên bản chỉ có tiêu đề của mã. Điều này không được khuyến khích bởi Boost vì nó có thể phá vỡ một số chức năng. Tuy nhiên, kể từ năm 1.69, chỉ tiêu đề dường như đã trở thành mặc định , được cho là khiến câu hỏi này trở nên lỗi thời.