Ошибка связи при использовании разделяемой памяти с POCO

Когда я подал заявку в POCO, я обнаружил странную вещь об ошибке компиляции.

Я добавил -lrt в соответствии с проверкой аналогичных проблем других. Тем не менее, это все еще не работает.

/usr/local/lib//libPocoFoundation.a(SharedMemory.o): в функции Poco::SharedMemoryImpl::SharedMemoryImpl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, Poco::SharedMemory::AccessMode, void const*, bool)': SharedMemory.cpp:(.text+0x2ab): undefined reference toshm_open' SharedMemory.cpp:(.text+0x31b): неопределенная ссылка на shm_unlink' /usr/local/lib//libPocoFoundation.a(SharedMemory.o): In function Poco::SharedMemoryImpl::close()': SharedMemory.cpp:(. Text+0x666): неопределенная ссылка на `shm_unlink' collect2: ошибка: ld вернул 1 состояние выхода Makefile:17: рецепт для цели 'test' не выполнен make: *** [тест] Ошибка 1

Волшебным образом, если я добавлю фиктивную функцию, как показано ниже.

int dummy()
{
    const char *memname = "sample";
    const size_t region_size = sysconf(_SC_PAGE_SIZE);
    int fd = shm_open(memname, O_CREAT | O_TRUNC | O_RDWR, 0666);
    if (fd == -1)
        return -1;
    int r = shm_unlink(memname);
    if (r != 0)
        return -1;
}

Он успешно построен.

Я не могу понять, почему и хотел бы искать формальное, чтобы избежать такого странного обходного пути. Кто-нибудь может помочь в этом, пожалуйста?

Кроме того, я проверил libPocoFoundation.a и нашел оба

  1. shm_open

  2. shm_unlink

принадлежат "Символ не определен"

Заранее спасибо.

1 ответ

Ответили здесь - проблема в порядке связанных библиотек (-lrt до -lPocoFoundation).

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