未解析的符号列表:shm_open

问题描述 投票:0回答:1

我使用vxWorks 6.9项目DKM(可下载内核模块),硬件是:PLC Melsec R12CCPU-V,语言:C ++,IDE:CW Workbench(WindRiver 3.3)。 我想使用 shm_open() 和 mmap() 在多个任务之间共享内存。构建时没有错误,但下载并运行调试时,会出现警告:“shm_open 未解析的符号列表”。 PLC Melsec R12CCPU-V 已经支持 INCLUDE_POSIX_SHM 和 INLUDE_POSIX_MAPPED_FILES,我尝试将其包含在 configAll.h 中但没有成功。我找不到任何方法来编辑 vxWorks 映像或 BSP,您有什么想法请帮忙吗?

这是我的代码:

#include <vxWorks.h>
#include <stdio.h>
#include <string.h>
#include <sysLib.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>

int producer ()
    {
    int   fd;
    int   ix;
    int * pData;
    
    /* create a new SHM object */

    fd = shm_open("/myshm", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);

    if (fd == -1)
        exit (1);

    /* set object size */

    if (ftruncate (fd, 0x1000) == -1)
        exit (1);

    /* Map shared memory object in the address space of the process */

    pData = (int *) mmap (0, 0x1000,  PROT_READ | PROT_WRITE, 
                          MAP_SHARED, fd, 0);

    if (pData == (int *) MAP_FAILED)
        exit (1);

    /* close the file descriptor; the mapping is not impacted by this */

    close (fd);

    /* The mapped image can now be written via the pData pointer */

    for (ix = 0; ix < 25; ix++)
        *(pData + ix) = ix;

    /* unmap shared memory object */

    munmap ((void *)pData, 0x1000);
    }

c++ vxworks wind-river-workbench
1个回答
0
投票

如果在 Linux 系统上编译 C++ 代码时遇到 undefined reference to 'shm_open' 错误,通常表示编译过程中没有链接提供 shm_open 函数的实时库(-lrt)。

解决方案 编译时需要链接-lrt库。这是使用 g++ 的示例:

g++ -o your_program est.cpp -lrt
© www.soinside.com 2019 - 2024. All rights reserved.