shm_open是通过链接librt提供的。请尝试将-lrt标志传递给链接器。试试看:
//创建或打开一个共享内存,成功返回一个整数的文件描述符,错误返回-1。 1.name:共享内存区的名字; 2.标志位;open的标志一样 3.权限位 int shm_unlink(const char *name); 编译时要加库文件-lrt*/#defineSHMNAME "shm_ram"#defineOPEN_FLAG O_RDWR|O_CREAT#defineOPEN_MODE 00777#defineFILE_SIZE 4096*...
$ gcc shm_test.c -lrt -o shm_test $ ./shm_test 看下运行前后结果:运行前查看/dev/shm/下...
如果你注意到的话,这样编译就能通过了: gcc -o test test.c -lrt 其实就是要连接库的原因。但是需要注意,-lrt需要放到后面,如果放到前面,还会报同样的错误,原因未知。下面给出一个我测试过的例子 /tmp/cc2aVWuG.o: In function `main':simple.c:(.text+0x2c): undefined reference to `shm_open'simpl...
但是,如果你在编译时没有使用正确的编译器标志(例如,在GCC中,你可能需要-lrt来链接实时库,尽管对于shm_open来说这通常不是必需的),或者在某些特殊环境中,可能需要额外的链接选项。然而,在大多数情况下,仅包含正确的头文件并使用标准C库就足够了。 如果以上都正确,检查代码中的其他潜在问题: 如果以上步骤都检查...
these functions must specify the -lrt flag to cc in order to link against the required ("realtime") library. POSIX leaves the behavior of the combination of O_RDONLY and O_TRUNC unspecified. On Linux, this will successfully truncate an existing shared memory object - this may not be so ...
//创建或打开一个共享内存,成功返回一个整数的文件描述符,错误返回-1。 1.name:共享内存区的名字; 2.标志位;open的标志一样 3.权限位 int shm_unlink(const char *name); 编译时要加库文件-lrt */ #define SHMNAME "shm_ram" #define OPEN_FLAG O_RDWR|O_CREAT ...
NAME shm_open, shm_unlink - create/open or unlink POSIX shared memory objects LIBRARY Real-time library (librt,-lrt) SYNOPSIS #include<sys/mman.h>#include<sys/stat.h>/* For mode constants */#include<fcntl.h>/* For O_* constants */intshm_open(constchar*name,intoflag,mode_tmode);int...
The POSIX shared memory object implementation on Linux 2.4 makes use of a dedicated file system, which is normally mounted under /dev/shm. 如果你注意到的话,这样编译就能通过了: gcc -lrt -o test test.c 其实就是要连接库的原因。
These functions are providedinglibc2.2and later. Programsusingthese functions must specify the-lrt flag to ccinorder to link against the required ("realtime") library. POSIX leaves the behavior of the combination of O_RDONLY and O_TRUNC