c++ - Boost Interprocess 找不到 boost/config/user.hpp

标签 c++ boost interprocess boost-interprocess

我正在编译一个 Boost Interprocess 示例:

#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../../../space/dist/boost/boost_1_66_0/boost -I../../../space/dist/boost/boost_1_66_0/libs -include ../../../space/dist/boost/boost_1_66_0/boost/config.hpp -MMD -MP -MF "build/Debug/GNU-Linux/main.o.d"-o构建/调试/GNU-Linux/main.o main.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

这是怎么回事?为什么不能编译?

最佳答案

您必须将 boost 库的包含设置为包含 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

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

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

关于c++ - Boost Interprocess 找不到 boost/config/user.hpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49797375/

相关文章:

c++ - 为没有继承的模板参数类提供构造函数

c++ - Protocol Buffer 在解析时是否重用字符串指针?

c++ - 将 Boost 序列化与前向声明类和继承一起使用

c++ - 我正在尝试创建一个 C++ 映射,其中包含 boost 内存映射文件中的 vector 值

c++ - boost::spirit 。将(名称)(描述)文本解析为 map

c++ - Boost进程间共享内存问题

Python 与空闲进程的进程间通信

c++ - CMake:包含 vs add_subdirectory:相对头文件路径

c++ - 这个语法是什么意思,与c++有关

c++ - 如何在托管共享内存段中创建同步机制?