我在Netbeans中做了一個項目,它在那裏工作的很好。但是當我試圖使用makefile進行編譯時,我收到了Segmentation fault。爲什麼我無法訪問共享內存?我應該使用char *嗎?在共享內存中寫入時出現分段錯誤
#include <fstream>
#include <string>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
static std::string *shmem; //shared memory
int main(int argc, char** argv)
{
//open file and copy content
std::ifstream ifs("example.txt");
std::string content((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>() ));
size_t size = content.size();
//create shared memory page and copy content
shmem = static_cast<std::string*>(mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0));
*shmem = content;
return 0;
}
這裏是我的Makefile
CC = g++
CFLAGS = -c -Wall -std=c++11 -pthread
LDFLAGS = -pthread
SOURCES = main.cpp
OBJECTS =$(SOURCES:.cpp=.o)
EXECUTABLE=MapReduce
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected]
.cpp.o:
$(CC) $(CFLAGS) $< -o [email protected]