BOOST库 --boost_options组件使用

本文介绍了一个使用Boost库中program_options组件的例子,展示了如何通过命令行参数来设置程序配置,包括帮助信息和压缩级别等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统环境Ubuntu14.04 LTS g++-4.8

1、示例代码 boost_options.cpp


#include <iostream>
using namespace std;

#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char*argv[])
{
    //int level;
    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        //("help,h", "produce help message")
        ("compression", po::value<int>(), "set compression level");
        //("compression", po::value<int>(&level)->default_value(1), "set compression level");

    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);

    if(vm.count("help"))
    {
        cout<<desc<<endl;
        return 1;
    }

    if(vm.count("compression"))
    {
        cout<<"compression level was set to "<<vm["compression"].as<int>()<<"."<<endl;
        //cout<<"compression level: "<<level<<endl;
    }
    else
    {
        cout<<"compression level was not set."<<endl;
    }

    return 0;
}

2、说明:BOOST库大多数组件不需要编译链接,直接在自己的源码里包含相应头文件夹即可。但少量库(如chrono、date_time、regex、program_options、thread、python等),必须编译成静态库或者动态库,并在构建时指定链接选项才能使用。

program_options需要指定库文件

$g++ -I/usr/local/inlcude -L/usr/local/lib boost_options.cpp -o boost_options -lboost_program_options

$./boost_options --help

输出以下内容:
Allowed options:
–help produce help message
–compression arg set compression level

$./boost_options --compression 100

输出以下内容:
compression level was set to 100.

ldconfig -p | grep pcl libpcl_visualization.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_visualization.so.1.10 libpcl_visualization.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_visualization.so libpcl_tracking.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_tracking.so.1.10 libpcl_tracking.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_tracking.so libpcl_surface.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_surface.so.1.10 libpcl_surface.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_surface.so libpcl_stereo.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_stereo.so.1.10 libpcl_stereo.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_stereo.so libpcl_segmentation.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_segmentation.so.1.10 libpcl_segmentation.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_segmentation.so libpcl_search.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_search.so.1.10 libpcl_search.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_search.so libpcl_sample_consensus.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_sample_consensus.so.1.10 libpcl_sample_consensus.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_sample_consensus.so libpcl_registration.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_registration.so.1.10 libpcl_registration.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_registration.so libpcl_recognition.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_recognition.so.1.10 libpcl_recognition.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_recognition.so libpcl_people.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_people.so.1.10 libpcl_people.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_people.so libpcl_outofcore.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_outofcore.so.1.10 libpcl_outofcore.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_outofcore.so libpcl_octree.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_octree.so.1.10 libpcl_octree.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_octree.so libpcl_ml.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_ml.so.1.10 libpcl_ml.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_ml.so libpcl_keypoints.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_keypoints.so.1.10 libpcl_keypoints.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_keypoints.so libpcl_kdtree.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_kdtree.so.1.10 libpcl_kdtree.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_kdtree.so libpcl_io_ply.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_io_ply.so.1.10 libpcl_io_ply.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_io_ply.so libpcl_io.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_io.so.1.10 libpcl_io.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_io.so libpcl_filters.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_filters.so.1.10 libpcl_filters.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_filters.so libpcl_features.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_features.so.1.10 libpcl_features.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_features.so libpcl_common.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_common.so.1.10 libpcl_common.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_common.so libpcl_apps.so.1.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_apps.so.1.10 libpcl_apps.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcl_apps.so libdapclient.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libdapclient.so.6 libdapclient.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libdapclient.so (base) kxl@kxl-MS-7D46:~$ ldconfig -p | grep boost libboost_wserialization.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_wserialization.so.1.71.0 libboost_wserialization.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_wserialization.so libboost_wave.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_wave.so.1.71.0 libboost_wave.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_wave.so libboost_unit_test_framework.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.71.0 libboost_unit_test_framework.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_unit_test_framework.so libboost_type_erasure.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_type_erasure.so.1.71.0 libboost_type_erasure.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_type_erasure.so libboost_timer.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_timer.so.1.71.0 libboost_timer.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_timer.so libboost_thread.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 libboost_thread.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_thread.so libboost_system.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_system.so.1.71.0 libboost_system.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_system.so libboost_stacktrace_noop.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_noop.so.1.71.0 libboost_stacktrace_noop.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_noop.so libboost_stacktrace_basic.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_basic.so.1.71.0 libboost_stacktrace_basic.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_basic.so libboost_stacktrace_backtrace.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_backtrace.so.1.71.0 libboost_stacktrace_backtrace.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_backtrace.so libboost_stacktrace_addr2line.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_addr2line.so.1.71.0 libboost_stacktrace_addr2line.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_stacktrace_addr2line.so libboost_serialization.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_serialization.so.1.71.0 libboost_serialization.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_serialization.so libboost_regex.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 libboost_regex.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_regex.so libboost_random.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_random.so.1.71.0 libboost_random.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_random.so libboost_python38.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python38.so.1.71.0 libboost_python38.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python38.so libboost_program_options.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 libboost_program_options.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_program_options.so libboost_prg_exec_monitor.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_prg_exec_monitor.so.1.71.0 libboost_prg_exec_monitor.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_prg_exec_monitor.so libboost_numpy38.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_numpy38.so.1.71.0 libboost_numpy38.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_numpy38.so libboost_mpi_python38.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_mpi_python38.so.1.71.0 libboost_mpi_python38.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_mpi_python38.so libboost_mpi.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_mpi.so.1.71.0 libboost_mpi.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_mpi.so libboost_math_tr1l.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1l.so.1.71.0 libboost_math_tr1l.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1l.so libboost_math_tr1f.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1f.so.1.71.0 libboost_math_tr1f.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1f.so libboost_math_tr1.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1.so.1.71.0 libboost_math_tr1.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_tr1.so libboost_math_c99l.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99l.so.1.71.0 libboost_math_c99l.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99l.so libboost_math_c99f.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99f.so.1.71.0 libboost_math_c99f.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99f.so libboost_math_c99.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99.so.1.71.0 libboost_math_c99.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_math_c99.so libboost_log_setup.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_log_setup.so.1.71.0 libboost_log_setup.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_log_setup.so libboost_log.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_log.so.1.71.0 libboost_log.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_log.so libboost_locale.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_locale.so.1.71.0 libboost_locale.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_locale.so libboost_iostreams.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_iostreams.so.1.71.0 libboost_iostreams.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_iostreams.so libboost_graph_parallel.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_graph_parallel.so.1.71.0 libboost_graph_parallel.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_graph_parallel.so libboost_graph.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_graph.so.1.71.0 libboost_graph.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_graph.so libboost_filesystem.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 libboost_filesystem.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_filesystem.so libboost_fiber.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_fiber.so.1.71.0 libboost_fiber.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_fiber.so libboost_date_time.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 libboost_date_time.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_date_time.so libboost_coroutine.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_coroutine.so.1.71.0 libboost_coroutine.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_coroutine.so libboost_context.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_context.so.1.71.0 libboost_context.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_context.so libboost_container.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_container.so.1.71.0 libboost_container.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_container.so libboost_chrono.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_chrono.so.1.71.0 libboost_chrono.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_chrono.so libboost_atomic.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_atomic.so.1.71.0 libboost_atomic.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_atomic.so
最新发布
07-06
<think>我们正在Linux系统中检查已安装的PCL和Boost的信息。用户的需求是查看系统中已安装的PCL和Boost的版本和安装路径,可能用于开发或调试目的。以下步骤将帮助用户获取这些信息。 ### 检查PCL的安装信息 #### 1. 使用`pkg-config`查询(推荐) PCL通常提供了pkg-config的配置文件(`.pc`文件),我们可以通过以下命令查询: ```bash pkg-config --modversion pcl_common ``` 如果成功,将输出已安装的PCL版本。如果上述命令失败(可能是因为模块名不匹配),可以尝试查询所有PCL模块: ```bash pkg-config --list-all | grep pcl ``` 然后选择一个模块(如`pcl_common`)查询版本。 #### 2. 检查头文件版本 PCL的头文件中通常包含版本信息。我们可以查看`pcl/common/common.h`头文件: ```bash # 查找头文件位置 locate pcl/common/common.h # 查看版本信息(如果找到) grep -A 1 "PCL_VERSION_COMPARE" /usr/include/pcl-*/pcl/common/common.h ``` 或者使用: ```bash cat /usr/include/pcl-<version>/pcl/pcl_config.h | grep PCL_VERSION ``` 需要将`<version>`替换为实际版本号(如1.10, 1.12等)。 #### 3. 检查文件 通过文件的命名通常可以推断版本: ```bash # 查找所有与pcl相关的文件 ls /usr/lib/x86_64-linux-gnu/libpcl_* # 或者 ls /usr/local/lib/libpcl_* ``` 注意文件名中的版本号。 ### 检查Boost的安装信息 #### 1. 使用`dpkg`查询(适用于通过apt安装的Boost) ```bash dpkg -s libboost-dev | grep Version ``` 如果系统安装了多个Boost组件,可以查询所有: ```bash dpkg -l | grep libboost ``` #### 2. 检查头文件和路径 Boost的头文件和文件通常安装在标准路径: ```bash # 查看头文件路径(通常包含版本号) ls /usr/include/boost # 查看文件路径 ls /usr/lib/x86_64-linux-gnu/libboost* ``` #### 3. 使用Boost自带的版本信息 Boost提供了一个获取版本号的函数,我们可以编写一个简单程序来检测: ```cpp #include <boost/version.hpp> #include <iostream> int main() { std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl; return 0; } ``` 编译并运行: ```bash g++ -o boost_version boost_version.cpp && ./boost_version ``` #### 4. 检查环境变量 有时Boost可能安装在自定义路径,可以通过环境变量查看: ```bash echo $BOOST_ROOT echo $BOOST_INCLUDEDIR echo $BOOST_LIBRARYDIR ``` ### 总结步骤 1. **PCL版本检查**: - 优先使用`pkg-config --modversion pcl_common` - 其次检查头文件或文件路径中的版本号 2. **Boost版本检查**: - 优先使用`dpkg`(如果通过apt安装) - 其次通过头文件路径或编写测试程序 > **注意**:如果系统中存在多个版本的PCL或Boost,可能需要通过`ldconfig`或`LD_LIBRARY_PATH`环境变量来确认当前生效的版本。 §§相关问题§§ 1. 如何解决系统中多个PCL版本冲突的问题? 2. 如何指定CMake使用特定版本的Boost? 3. 如何通过CMakeLists.txt正确查找PCL?</think>### 如何检查系统中已安装的PCL和Boost信息 #### 一、检查PCL安装信息 1. **查询安装版本** ```bash dpkg -l | grep pcl ``` - 输出示例:`ii libpcl-dev 1.10.0-7build1` 显示PCL版本为1.10.0[^3] 2. **查看头文件位置** ```bash locate pcl/common/common.h ``` - 路径示例:`/usr/include/pcl-1.10/pcl/common/common.h` 包含版本号 3. **检查文件路径** ```bash ldconfig -p | grep libpcl ``` - 输出示例: ``` libpcl_common.so.1.10 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpcl_common.so.1.10 ``` #### 二、检查Boost安装信息 1. **查询安装版本** ```bash dpkg -l | grep libboost ``` - 输出示例:`ii libboost-dev 1.71.0.0ubuntu2` 显示Boost版本为1.71.0 2. **查看头文件位置** ```bash locate boost/version.hpp ``` - 打开文件查看宏定义: ```cpp #define BOOST_VERSION 107100 // 107100 = 1.71.0 ``` 3. **检查文件路径** ```bash ldconfig -p | grep boost ``` - 输出示例: ``` libboost_system.so.1.71.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 ``` #### 三、验证环境变量配置 检查`~/.bashrc`或`~/.profile`中的路径设置: ```bash grep -E "PCL|Boost|LD_LIBRARY" ~/.bashrc ``` - 应有类似配置: ```bash export PCL_ROOT=/usr export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu ``` #### 四、版本兼容性检查公式 当同时使用PCL和Boost时,需满足: $$ \text{PCL}_\text{req} \subseteq \text{Boost}_\text{installed} $$ 其中: - $\text{PCL}_\text{req}$ = PCL要求的Boost版本 - $\text{Boost}_\text{installed}$ = 实际安装的Boost版本 > **提示**:PCL 1.10通常需要Boost ≥1.65[^2],若版本不匹配会导致段错误 #### 五、完整环境检查脚本 ```bash #!/bin/bash echo "=== PCL检查 ===" pkg-config --modversion pcl_common 2>/dev/null || echo "PCL未安装" echo "头文件路径: $(locate pcl/common/common.h | head -1)" echo -e "\n=== Boost检查 ===" cat /usr/include/boost/version.hpp 2>/dev/null | grep "BOOST_LIB_VERSION" echo "文件路径: $(ldconfig -p | grep boost_system | awk '{print $4}')" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IvanLJF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值