shm_open выдает ошибку сегментации при компиляции с флагом -static

Я пытаюсь создать приложение с общей памятью, в котором я могу обмениваться данными между несвязанными процессами. В моем примере вызов POSIX shm_open работает нормально, если я использую динамическую привязку при сборке, как показано ниже.

      gcc main.c -o example -lpthread -lrt

Но когда я создаю его со статической привязкой, используя приведенную ниже команду, он успешно строится, но выдает SIGSEGV при вызове вызова shm_open.

      gcc main.c -static -o example  -lrt -lpthread 

Что может быть возможной причиной ошибки сегментации при вызове shm_open.

Вот пример кода main.c, который я использую:

      #include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <unistd.h>


#define DATA "/mtxmydata"

struct mydata { int a, b; pthread_mutex_t mtxlock; };

int main()
{
    int fd;
    unsigned int val;
    struct mydata *addr;
    pthread_mutexattr_t pshared;

    pthread_mutexattr_init(&pshared);
    pthread_mutexattr_setpshared(&pshared, PTHREAD_PROCESS_SHARED);
    pthread_mutexattr_getpshared(&pshared , &val);
    printf(" %d\n", val);

    fd = shm_open(DATA, O_CREAT | O_RDWR, 0666);
    if (fd == -1) {
        perror("shm_open");
        exit(1);
    }

    /* 4k is min shared memory */
    if (ftruncate(fd, getpagesize()) == -1) {
        perror("ftruncate");
        exit(1);
    }

    addr = (struct mydata *)mmap(NULL, sizeof(struct mydata),
                  PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (addr == MAP_FAILED) {
        perror("mmap");
        exit(1);
    }
    pthread_mutex_init(&addr->mtxlock, &pshared);
    addr->a = 0;
    addr->b = 0;
    munmap(addr, sizeof(struct mydata));

    return 0;
}

0 ответов

Другие вопросы по тегам