【问题标题】:link error when using shared memory with POCO将共享内存与 POCO 一起使用时出现链接错误
【发布时间】:2017-11-22 10:09:52
【问题描述】:

当我用 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:目标“测试”的配方失败 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

属于'符号未定义'

提前致谢。

【问题讨论】:

  • 你有一个链接错误。我们需要查看失败的链接命令来帮助您。在您的问题正文中发布未经编辑的完整构建日志。

标签: gcc linker-errors shared-memory poco poco-libraries


【解决方案1】:

回答here - 问题是链接库的顺序(-lrt-lPocoFoundation 之前)。

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多