html tool

2018年10月18日星期四

gcc编译-lm参数



问题:
c -中用了
的 exp() 
直接 编译有错
# 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.htm
https://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放后面。

没有评论:

发表评论