如何将boost项目包含在我的c++代码中

How to include the boost project in my c++ code

本文关键字:我的 c++ 代码 包含 boost 项目      更新时间:2023-10-16

我正试图使用Boost的cpp-netlib编写一个超级琐碎的程序,以解析示例c++文件中的HTTP URL。

代码是琐碎的:

#include <boost/network/uri>
#include <iostream>
using namespace boost::network;
int main() {
    uri::uri instance("http://www.example.com");
    std::cout << "scheme: " << instance.scheme() << std::endl
        << "host: " << instance.host() << std::endl;
    return 0;
}

我的测试代码和boost源代码在同一个目录中

g++ -Icpp-netlib-0.12.0-final -o test test.cpp

它没有找到传递了-I的include,我得到了一个致命的错误。

fatal error: 'boost/network/uri' file not found
#include <boost/network/uri>
         ^
1 error generated.

使用他们的库开始编写示例代码的正确方法是什么?

由此推测:

我的测试代码与boost源所在的目录相同。

如果您已经将boost标头解压缩到源代码目录中,那么include语句将无法工作。带有<>的#include仅在标准include路径(/usr/include&依此类推)中搜索include文件。

因此,您可以尝试使用"的include语句,它也会从当前源目录中搜索,或者更好的做法是,使用发行版中的软件包管理器将官方的boost开发软件包安装到您的计算机上。

如果在启动g++的源代码目录中有目录"cpp-netlib-0.12.0-final/boost",编译器命令行参数"-Icpp-netlib-0.112.0-final"将帮助编译器找到boost。

  1. 关于您的Boost安装,您是否正确安装并链接了Boost.date_time?Boost的大部分内容只是标题;这里是Boost.systemBoost.Regex,并且不需要单独的二进制。然而,Boost.Date_time有一个单独的二进制库,使用它还需要额外的安装步骤

    尽管Boost大多仅限于标头,但使用cpp-netlib仍然需要与Boost.System、Boost.Date_time、,和Boost.Regex.[参考文献1]

  2. 您的Boost库是否高于1.50.0版本?

  3. 您是否设置了BOOST_ROOT环境变量?

boost根目录的路径(通常为/usr/local/brust_1_60_0)在文档和邮件中有时被称为$BOOST_ROOT清单[参考文献2]

  1. Boost是否安装在/usr/local中?您可能需要root访问权限才能执行此操作。

  2. 您是否检查了安装的权限?如果您以root用户身份安装,您可能需要对非root帐户授予chmod 755权限

参考文献:
1.http://cpp-netlib.org/0.12.0/getting_started.html#getting-已启动
2.http://www.boost.org/doc/libs/1_60_0/more/getting_started/unix-variants.html

希望这能有所帮助。