gcc -lm -ldl是什么意思?----包含动态链接库

到书上出现gcc -lm 的选项,甚是不解,在网上查阅了一些资料,访问了一些论坛整理下。
初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to 'sqrt'。
像 sqrt(3.0); 这种调用,gcc 在编译时就可以将其替换为对应的值(gcc 优化的一部分),从而不需要链接 sqrt 所在的数学库 libm;而像 sqrt(n); 这种调用,一般无法做这种替换,因此需要链接 libm。

编译的时候,链接 数学库, -lptread 链接线程库等等,也可以使自己编译的库

Question: 编译程序时得到undefined reference to 'xxxx'这样的错误提示 
Answer: 那你一定是缺少某个库,用 -l参数将库加入。Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及"."后面的so,la,a等即可。 因为数学函数位于libm.so库文件中(通常在/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找.
同时,常见的库链接方法为: 
数学库 -lm ; posix线程 -lpthread 
lc 是link libc
lm 是link libm
lz 是link libz

-ldl

#include <dlfcn.h>

dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001, <dlfcn.h>

这些函数,动态库的相关部分

-dl ,是显式加载动态库的动态函数库

Makefile 中gcc -lm -ldl是什么意思?相关推荐

  1. linux gcc ldl,Makefile 中gcc -lm -ldl是什么意思?

    gcc -lm -ldl是什么意思?----包含动态链接库 到书上出现gcc -lm 的选项,甚是不解,在网上查阅了一些资料,访问了一些论坛整理下. 初学linux和gcc,C代码调用math.h中的 ...

  2. gcc -lm -ldl是什么意思?----包含动态链接库

    到书上出现gcc -lm 的选项,甚是不解,在网上查阅了一些资料,访问了一些论坛整理下. 初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数.若如sqrt(3.0)则可以编译 ...

  3. Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D

    在源代码里面如果这样是定义的: #ifdef   MACRONAME //可选代码 #endif 那在makefile里面 gcc   -D   MACRONAME=MACRODEF 或者 gcc   ...

  4. Makefile:GCC CFLAGS变量和LDFLAGS变量

    LOCAL_CFLAGS参数说明 其实 CFLAGS += -D__MT2625_ENABLED__ 这个CFLAGS是gcc编译的选项,在makefile中用CFLAGS这个变量来表示这个编译选项. ...

  5. Makefile中的一些小知识点,及常用的makefile举例

    一.gcc -s(注意是小写的s)命令是什么意思?为什么用此命令编译后的程序比用优化后的程序还小? 这个参数会把符号表从最终的可执行文件中删除.没有符号表,你就不能用gdb调试了,常见的用法是: 比方 ...

  6. 在cmakelists和makefile中设置opencv

    1. 查询电脑上的opencv版本: pkg-config --modversion opencv 2. 在电脑上安装多个版本的opencv,可以通过指定安装路径进行设置:      下载源码后进入文 ...

  7. makefile中的include *******

    对于makefile中的include ***,***指的是包含的文件,当执行makefile时,先执行include ***这句,加载包含的文件(夹),如果不存在则会报错! 如果在include前面 ...

  8. makefile中的零星知识点

    文章目录 1 make命令的使用 2 变量的导出(export) 3 Makefile中可以使用shell命令 4 在Makefile中怎么放置第1个目标 5 假想目标 1 make命令的使用 执行m ...

  9. C语言高级技巧-在Makefile中引用你的头文件

    在Makefile中添加头文 代码仓库:Makefile中添加头文件引用 我们常这样写C程序: #inlcude <stdio.h>int main(int argc, char *arg ...

最新文章

  1. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)
  2. STK 卫星覆盖分析笔记
  3. optee的异常向量表-(irq,fiq,svc...)
  4. 4、修改用户(RENAME USER)
  5. python中常用的语句元素
  6. oracle之 SYSAUX表空间维护
  7. C# Datagridview完整攻略
  8. QML工作笔记-Image中fillMode的使用
  9. SSH远程登录原理与运用
  10. protobuf vc2008编译
  11. 为什么我劝你放弃了Restful API?
  12. 人工智能的未来-揭示人类思维的奥秘How to create a mind - Ray Kurzweil
  13. 汉字为什么能流传至今_为什么中国的文字流传至今?
  14. 【Unity3D】游戏配表Excel转Txt,并且打成ab包
  15. win10系统云服务器配置,win10系统云服务器配置
  16. WireShark和Fidder进行网络抓包并对协议进行验证
  17. background-position进行图片定位
  18. python中py是什么意思_python中__init__.py是干什么的
  19. 原生js-购物车案例(四)增减商品数量,小计价格计算
  20. java陆小凤的游戏_《陆小凤传奇》游戏流程、经验心得

热门文章

  1. 实现Spring Boot 定时发送带附件邮件功能
  2. JS案例:接口加解密与防重放
  3. JAVA资料分享 自学
  4. 民用飞机着陆阶段着陆方法_8个出色的WordPress主题与可销售的着陆页
  5. a24_Python正则表达式---学习笔记
  6. 电源模块常见故障的解决方法有哪些?隔离宽电压输入高电压稳压输出升压电源模块
  7. 【深度学习】激活函数和损失函数
  8. 光子 量子 DNA计算机的发展情况,现代计算机的发展
  9. CAD绘制一个对齐标注(com接口VB语言)
  10. 系统权限服务创建桌面进程(进程也是系统权限)