2014-05-09 50 views
1

在FreeBSD 9.2編寫交流節目時爲什麼cpp告訴我'未定義的引用mtx_init'?我已經包括了頭

我想使用互斥鎖來幫助我控制某些變量的值,

和我讀到這個參考我得到了一些問題: 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 

請幫我找出問題!謝謝!!!

+0

這些函數在哪裏定義?在另一個源/目標文件中?在圖書館?您需要*鏈接*與該源/目標文件或庫。 –

+2

@JoachimPileborg恕我直言,這些是內核級函數(鏈接指的是內核開發手冊頁) –

+2

您所指的部分是關於內核級別的互斥函數。假設你正在實現一個用戶空間應用程序,而不是一個內核模塊,你需要使用像'pthread_mutex_'這樣的用戶空間函數(例如http://linux.die.net/man/3/pthread_mutex_init) –

回答

0

mtx_init是一個內核函數。除非您將代碼編譯爲內核模塊內核本身的一部分(您不需要將更多標誌傳遞給gcc),否則不能使用內核的鎖定原語。

對於用戶級代碼,您可以使用pthread或其他庫的數量。對於C++ BoostC++ mutex應該完成這項工作。

相關問題