我看到一个类似的问题被问到没有连贯的解决方案。 在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>
非常感谢任何见解!
答案 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'中的函数,则可能无法加载这些函数。