为什么cpp告诉我“对mtx_init的未定义引用”?我已经包含了标题

时间:2014-05-09 13:37:12

标签: c unix mutex freebsd

在FreeBSD 9.2上编写c程序时遇到了一些问题

我想使用互斥锁来帮助我控制某个变量的值,

我读了这个参考: http://www.freebsd.org/cgi/man.cgi?query=mutex&sektion=9

我已经包含了这些标题

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/param.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/kernel.h>
#include <sys/_mutex.h>

但是cpp总是告诉我这些:

3.c:(.text+0x25): undefined reference to `mtx_init'
3.c:(.text+0xa0): undefined reference to `mtx_trylock'
3.c:(.text+0xd3): undefined reference to `mtx_unlock'

我用这个命令编译:

gcc 3.c 

请帮我找出问题所在!感谢!!!

1 个答案:

答案 0 :(得分:0)

mtx_init是一个内核函数。除非您将代码编译为内核模块的内核本身(您不需要将更多标志传递给gcc),否则您无法使用内核的锁定原语

对于userland代码,您可以使用pthreads或其他库的数量。对于C ++ Boost,或C++ mutex应该完成这项工作。