我使用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);
}
如果在 Linux 系统上编译 C++ 代码时遇到 undefined reference to 'shm_open' 错误,通常表示编译过程中没有链接提供 shm_open 函数的实时库(-lrt)。
解决方案 编译时需要链接-lrt库。这是使用 g++ 的示例:
g++ -o your_program est.cpp -lrt