2013-04-04 44 views
0

我想從http://pages.cs.wisc.edu/~travitch/pthreads_primer.html(互斥部分)編譯樣品並行線程的代碼。當我運行此命令:未定義參考`褐色」,但math.h中已被列入

gcc -pedantic -Wall -o theaded_program pth.c -lpthread 

這是在鏈接說明,我得到這個錯誤

pth.c:45:5: warning: ISO C90 forbids mixed declarations and code [-pedantic] 
/tmp/ccajksBv.o: In function `opponent': 
pth.c:(.text+0x4a): undefined reference to `tan' 
/tmp/ccajksBv.o: In function `main': 
pth.c:(.text+0x131): undefined reference to `tan' 
collect2: ld returned 1 exit status 

然而#include <math.h>有代碼!海灣合作委員會的版本是4.6

回答

5

你應該添加-lm到你的編譯器選項。

除此之外,您還可以將-lpthread更改爲-pthread。

+0

至於爲什麼它的需要,請參閱[這](http://stackoverflow.com/a/4606406/1919302):) – amrith92 2013-04-04 11:50:25

+0

只給這一些額外的信息:用「-lm」連接數學庫(用文字「 - 連接數學」)。在這種情況下包含math.h是不夠的。 – puelo 2013-04-04 11:51:54

+0

爲了完整性,您應該在調用gcc時添加「-lm」,但在命令末尾加上*,或者至少在編譯單元的右側。這是鏈接器期望按照依賴性順序查找對象和庫的原因:首先(左)用戶(編譯單元)和後來(右)提供者(庫)。例如,嘗試將「lpthread」移動到您的來電GCC的左端,你會發現,GCC將不能夠解決您的POSIX線程調用。最好的問候,/Ángel – Angel 2016-10-30 07:10:02

0

最後,它必須是這樣的:gcc -pedantic -Wall -o theaded_program pth.c -pthread -lm