即使在使用-pthread -lrt进行编译时也未定义对`shm_open'的引用

时间:2017-03-27 16:43:39

标签: c gcc

我看到一个类似的问题被问到没有连贯的解决方案。 在linux上使用gcc编译器,我收到消息:

/tmp/ccPNsJFZ.o: In function `main':
testChTh.c:(.text+0xbfb): undefined reference to `shm_open'
collect2: error: ld returned 1 exit status
在命令行中输入gcc -pthread -lrt -o testChTh testChTh.c

。我只在我的代码中使用shm_open一次,即:

int shm_fd;

  /* create the shared memory segment */
  shm_fd = shm_open(name, O_RDWR, 0666);

我有以下相关的库:

#include <fcntl.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>

非常感谢任何见解!

1 个答案:

答案 0 :(得分:7)

在你的情况下

  gcc -pthread -lrt -o testChTh testChTh.c

不会起作用,因为您最后提供的testChTh.c期望使用librt。你需要写像

 gcc -o testChTh testChTh.c -pthread -lrt

引用online manual强调我的

  

-l library

     

在您编写此选项的命令中有所不同; 链接器按照指定的顺序搜索和处理库和目标文件。因此,'foo.o -lz bar.o'在文件foo.o之后但在bar.o之前搜索库'z'。如果bar.o引用'z'中的函数,则可能无法加载这些函数。