【问题标题】:undefined reference to `tan' but math.h has been included未定义对“tan”的引用,但已包含 math.h
【发布时间】:2013-04-04 11:42:22
【问题描述】:

我想从http://pages.cs.wisc.edu/~travitch/pthreads_primer.html(Mutex 部分)编译示例 pthread 代码。当我运行这个命令时:

 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> 存在于代码中!! gcc版本是4.6

【问题讨论】:

    标签: math gcc


    【解决方案1】:

    您应该将 -lm 添加到您的编译器选项中。

    除此之外,您还可以将 -lpthread 更改为 -pthread。

    【讨论】:

    • 为什么需要它,请参阅this :)
    • 只是为了提供一些额外的信息:使用“-lm”链接到数学库(换句话说:“-link math”)。在这种情况下,仅包含 math.h 是不够的。
    • 为了完整起见,您应该在对 gcc 的调用中添加“-lm”,但在命令末尾,或者至少在编译单元的右侧。这是因为链接器希望按依赖顺序查找对象和库:首先(左)用户(您的编译单元),然后(右)提供者(库)。例如,尝试将您的“lpthread”移动到您对 gcc 的调用的左端,您会发现 gcc 将无法解析您的 POSIX 线程调用。最好的问候,/Ángel
    【解决方案2】:

    最后一定是这样的:gcc -pedantic -Wall -o theaded_program pth.c -pthread -lm

    【讨论】:

    • 谢谢,正如您所指出的,它仅在 cmd 末尾有效。
    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多