在编译时为什么要加上 –lm ? |
您所在的位置:网站首页 › lm是什么意思啊 › 在编译时为什么要加上 –lm ? |
Linux 中常用链接来解决一些库函数的问题。在编译时链接可以生成可执行文件。了解一些链接的基本过程,能让我们在开发中减去不少的麻烦! 编译时使用 gcc -lm 程序功能很简单,下面的示例展示了exp()函数的用法。 (代码一) #include #include //exp int main(int argc, char const *argv[]){ //double x = 0; printf("The exponential value of %lf is %lf\n", 0, exp(0)); printf("The exponential value of %lf is %lf\n", 0+1, exp(0+1)); printf("The exponential value of %lf is %lf\n", 0+2, exp(0+2)); return(0); }编译结果:
编译输出: 来看看man手册exp函数的使用: 编译时在包含链接-lm,看看是否编译通过:
问题 两段代码同样都调用了exp函数,为什么一个需要链接,一个不需要链接呢? 我们可以观察到,代码一调用exp传入的参数是常量为 0 。代码二调用exp传入的参数是变量 x,那么对于代码一会不会在运行之前就计算好了呢? 来看看它们的汇编代码: (代码一) (代码二)
ldd命令查看链接库 代码一:
代码二:
总结 调用函数是否需要链接,可以使用命令“man 3 函数名“查看,如果需要链接库,最后都有说明。调用包含于libc库中的函数不需要链接。
欢迎关注微信公众号“程序猿编码”,这里Linux c/c++ 、Go语言、数据结构与算法、网络编程相关知识,常用的程序员工具。还有汇聚精炼每日时政、民生、文化、娱乐新闻简报,即刻知晓天下事! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |