Ошибка связи при использовании разделяемой памяти с 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 to
shm_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 и нашел оба
shm_open
shm_unlink
принадлежат "Символ не определен"
Заранее спасибо.
1 ответ
Ответили здесь - проблема в порядке связанных библиотек (-lrt
до -lPocoFoundation
).