如何安装boost::contract?Debian 9.4 amd64环境安装求助
在Debian 9.4 amd64上安装boost::contract的解决方案
嘿,刚好有过类似的折腾经验,其实boost::contract是Boost C++库的一个内置组件,不需要单独找它的专属安装包——搞定Boost库本身就能用上它,给你整理了两种靠谱的安装方式:
方法一:系统包管理器快速安装(推荐)
Debian 9的官方源里已经收录了完整的Boost开发库,直接用apt就能一步到位:
- 先更新源索引:
sudo apt update - 安装包含所有模块的Boost开发包(自然也包含boost::contract):
sudo apt install libboost-all-dev
安装完成后,你直接在代码里写#include <boost/contract.hpp>就能调用相关功能了,头文件和库文件系统都会自动处理好路径。
方法二:源码编译单独模块(轻量化需求)
如果不想装整个Boost库,只编译boost::contract模块也可以:
- 下载和Debian 9兼容的Boost源码(建议选1.62版本,和系统默认Boost版本匹配):
wget https://boostorg.jfrog.io/artifactory/main/release/1.62.0/source/boost_1_62_0.tar.gz - 解压并进入源码目录:
tar -xzf boost_1_62_0.tar.gz cd boost_1_62_0 - 生成构建工具b2:
./bootstrap.sh --prefix=/usr/local # 安装路径默认就是/usr/local,可按需修改 - 只编译并安装boost::contract模块:
./b2 install --with-contract
编译完成后,头文件会放在/usr/local/include/boost/,库文件在/usr/local/lib/,后续编译代码时指定链接库即可。
验证安装是否成功
写个简单的测试代码test_contract.cpp:
#include <boost/contract.hpp> #include <iostream> int add(int a, int b) { boost::contract::old_ptr<int> old_a = BOOST_CONTRACT_OLDOF(a); boost::contract::check c = boost::contract::function() .precondition([&] { BOOST_CONTRACT_ASSERT(a >= 0); BOOST_CONTRACT_ASSERT(b >= 0); }) .postcondition([&] { BOOST_CONTRACT_ASSERT(result >= *old_a); }); return a + b; } int main() { std::cout << add(2, 3) << std::endl; // 取消注释下面一行会触发断言,验证contract生效 // std::cout << add(-1, 3) << std::endl; return 0; }
用你已有的gcc编译:
g++ test_contract.cpp -o test_contract -lboost_contract
运行./test_contract,如果输出5就说明安装没问题;打开注释里的错误调用,会触发断言失败,证明boost::contract在正常工作。用clang编译也一样:
clang++ test_contract.cpp -o test_contract -lboost_contract
内容的提问来源于stack exchange,提问作者JiaHao Xu
相关产品推荐
相关产品推荐

