Boost Interprocess 找不到 boost/config/user.hpp
Boost Interprocess cannot find boost/config/user.hpp
我正在编译一个 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 build/Debug/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>
我正在编译一个 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 build/Debug/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>