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

Boost Interprocess找不到Boost/config/user。水电站

  •  0
  • user997112  · 技术社区  · 7 年前

    我正在编译一个Boost进程间示例:

    #include <interprocess/shared_memory_object.hpp>
    #include <interprocess/mapped_region.hpp>
    #include <cstring>
    #include <cstdlib>
    #include <string>
    
    int main(int argc, char *argv[])
    {
       using namespace boost::interprocess;
    
       if(argc == 1){  //Parent process
          //Remove shared memory on construction and destruction
          struct shm_remove
          {
             shm_remove() { shared_memory_object::remove("MySharedMemory"); }
             ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
          } remover;
    
          //Create a shared memory object.
          shared_memory_object shm (create_only, "MySharedMemory", read_write);
    
          //Set size
          shm.truncate(1000);
    
          //Map the whole shared memory in this process
          mapped_region region(shm, read_write);
    
          //Write all the memory to 1
          std::memset(region.get_address(), 1, region.get_size());
    
          //Launch child process
          std::string s(argv[0]); s += " child ";
          if(0 != std::system(s.c_str()))
             return 1;
       }
       else{
          //Open already created shared memory object.
          shared_memory_object shm (open_only, "MySharedMemory", read_only);
    
          //Map the whole shared memory in this process
          mapped_region region(shm, read_only);
    
          //Check that memory was initialized to 1
          char *mem = static_cast<char*>(region.get_address());
          for(std::size_t i = 0; i < region.get_size(); ++i)
             if(*mem++ != 1)
                return 1;   //Error checking memory
       }
       return 0;
    }
    

    但我遇到了一个编译错误:

    fatal error: boost/config.hpp: No such file or directory
    

    现在该文件确实存在,我可以通过包含丢失的头文件来修复错误:

    g++-c-g-I…//空格/dist/boost/boost\u 1\u 66\u 0/boost-I..//空格/dist/boost/boost\u 1\u 66\u 0/libs -包括../..//空格/dist/boost/boost\u 1\u 66\u 0/boost/config。水电站 -MMD-MP-MF“build/Debug/GNU-Linux/main.o.d”-o build/Debug/GNU-Linux/main。o主管道。cpp公司

    但在这样做之后,我现在发现另一个关于类似文件的错误:

    ./../../../space/dist/boost/boost_1_66_0/boost/config.hpp:30:29: fatal error: boost/config/user.hpp: No such file or directory
     #  include BOOST_USER_CONFIG
    

    发生了什么事?为什么这个不能编译?

    1 回复  |  直到 7 年前
        1
  •  1
  •   vasek Melih Mucuk    7 年前

    您必须将boost库的Include设置为目录 boost 子目录,以便找到所有内部boost包含。

    因此,如果将构建命令行更改为

    g++ -lrt -c -g -I../../../space/dist/boost/boost_1_66_0 -MMD -MP -MF "build/Debug/GNU-Linux/main.o.d" -o build/Debug/GNU-Linux/main.o main.cpp main.cpp
    

    并更改您的Include以匹配代码的boost文档 will compile :

    #include <boost/interprocess/shared_memory_object.hpp>
    #include <boost/interprocess/mapped_region.hpp>