代码之家  ›  专栏  ›  技术社区  ›  jwoolard

编译失败-不包含-boost

  •  0
  • jwoolard  · 技术社区  · 15 年前

    我正在试图编译第三方库,但是g++抱怨下面这行代码:

    typedef boost::shared_ptr<MessageConsumer> MessageConsumerPtr;
    

    奇怪的是,没有 #include 文件中的指令-显然应该是这样的;大约有60个文件有相同(或非常相似)的问题。很明显如果 包括: 引用相关boost头的指令,该指令将干净编译。

    我的问题是:如何让g++以某种方式自动找到相关的符号(在这个问题的所有实例中,它是一个找不到的名称空间-通常 std:: boost:: )通过自动处理相关的报头(或其他机制)。

    谢谢。

    编辑

    我当前的g++调用如下:

    g++ -fPIC -O3 -DUSING_PCH -D_REENTRANT -I/usr/include/boost -I./ -c MessageInterpreter.cpp -o MessageInterpreter.o
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   R Samuel Klatchko    15 年前

    你可以使用 -include 命令行选项:

    g++ -include boost/shared_ptr.hpp ...
    

    从手册页:

    -包含文件 处理文件,就好像“include”file“”出现在 主源文件。但是,搜索到的第一个目录 文件是预处理器的工作目录,而不是 包含主源文件的目录。如果在那里找不到它 在“include”..“搜索的其余部分中搜索 链条正常。

        2
  •  1
  •   Arkadiy    15 年前

    创建自己的wrapper.h文件,其中包含boost.h和broken.h。

    或者(非常脆弱的)确保你在每次使用之前都要使用带boost.h的breaked.h。

        3
  •  0
  •   StackedCrooked    15 年前

    也许第三方库的设计方式应该始终包括某个“main”头文件,以便正确处理依赖关系。

    否则,您可以添加 #include <boost/shared_ptr.hpp> 在包含给出错误消息的第三方头文件之前。