问题:
c -中用了
直接 编译有错
# gcc bind_one.c -o bind_one -lpthread
/tmp/ccBBlqHS.o:在函数‘threadFun’中:
bind_one.c:(.text+0x1a0):对‘exp’未定义的引用
collect2: 错误:ld 返回 1
解决:
参考: https://www.linuxidc.com/Linux/2017-09/147168.htmhttps://zhidao.baidu.com/question/384837882.html
# gcc bind_one.c -o bind_one -lpthread -lm 就可以了
解释:
查了一下发现:主要是C/C++编译为
obj
文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。-lm是连接数学库;-lm命令是使编译的时候,链接数学库,
-lptread 链接线程库,可以使自己编译的库
注意1:-lm要加在编译文件后面。
这个主要的原因是
gcc
编译的时候,各个文件依赖顺序的问题。在gcc
编译的时候,如果文件a
依赖于文件b
,那么编译的时候必须把a
放前面,b
放后面。
没有评论:
发表评论