[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
问题log
/tmp/ccByifPx.o: In function `main':
read.c:(.text+0x1a): undefined reference to `shm_open'
read.c:(.text+0xd9): undefined reference to `shm_unlink'
collect2: error: ld returned 1 exit status
程序代码
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#define SHM_NAME "./mac_shm"
#define SHM_SIZE 18 // MAC地址长度为17个字符,加上一个终止符
int main() {
// 打开共享内存对象
int shm_fd = shm_open(SHM_NAME, O_RDONLY, 0666);
if (shm_fd == -1) {
perror("shm_open");
exit(EXIT_FAILURE);
}
// 映射共享内存
char *shm_ptr = mmap(0, SHM_SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
if (shm_ptr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
// 读取MAC地址
printf("MAC Address: %s\n", shm_ptr);
// 解除映射
if (munmap(shm_ptr, SHM_SIZE) == -1) {
perror("munmap");
exit(EXIT_FAILURE);
}
// 关闭共享内存对象
close(shm_fd);
// 删除共享内存对象
shm_unlink(SHM_NAME);
return 0;
}
问题分析
编译结果实际上是说,没include相应的头文件,或是头文件不存在,man shm_open看到如下内容
解决方案
gcc shm_test.c -lrt -o shm_test