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

dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001,

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

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

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

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

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

  2. Linux学习笔记-Makefile中的变量及函数

    Makefile中的变量 此处的变量不是C/C++,Java等中的变量(认为他是一个字符串就阔以了) 一般变量名用大写字母来写,如下所属: SUBDIR = src xml SUBDIR += osa ...

  3. linux shell ifeq,Makefile中的ifeq 多条件使用

    Makefile中的ifeq 多条件使用 网上关于makefile中ifeq的介绍已经很多了,为什么我还要在写这篇文章,因为他们只说了if else两种条件的情况,并没有讲多于两种条件情况的使用. 多 ...

  4. linux dd devzero,makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令

    ifeq语法是ifeq ";" ";"  ,功能是比较参数"arg1"和"arg2"的值是否相同,相同时为1 ifneq ...

  5. linux shell ifeq,Makefile 中 ifeq ifneq 等用法

    (1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2)最近在学 ...

  6. 使用gcc与makefile在linux中运行简单的c语言程序

    目录 使用GCC编译C语言程序 示例代码 main1.c sub1.c 编译与链接 使用Makefile 在Windows下运行程序 使用GCC编译C语言程序 示例代码 main1.c 说明:主程序文 ...

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

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

  8. Linux命令【三】gcc编译+静态库+动态库+makefile+gdb调试

    用C编译器编译源文件:gcc 源文件 -o 可执行文件名 详细步骤: gcc -E a.c -o a.i预处理器将头文件展开,宏替换,去掉注释 gcc -S a.i -o a.s编译器将C文件变成汇编 ...

  9. linux篇【3】:Linux 环境基础开发工具yum,vim,gcc,makefile,git

    目录 一.Linux 软件包管理器 yum 1.什么是软件包 2.centos 7中安装形式 3.yum安装好处: 4.yum工具的常用选项 (1)yum list | grep sl 软件包信息介绍 ...

最新文章

  1. 感知器数学表达和训练算法
  2. 【数字信号处理】相关函数与线性卷积关系 ( 卷积概念 | 相关函数概念 | 相关函数与线性卷积对比 | x(-m) 共轭 与 y(m) 的卷积就是两个信号 位移 m 的相关函数 )
  3. 昼猫笔记 从此告别复杂代码--JavaScript
  4. python如何模拟键盘输入_python 模拟键盘输入
  5. 更适合Pythoner的标记语言Yaml学习总结
  6. POJ3070 Fibonacci【矩阵快速幂】
  7. Red5服务器端报错:无法解析类型ResourcePatternResolver
  8. Golang中对new和make的理解
  9. [混音插件]板岩混响效果器
  10. 系统映像恢复计算机重启失败,学会使用win10系统的winRE进行系统启动修复、系统还原、系统重置、系统映像恢复等-网络教程与技术 -亦是美网络...
  11. unity3d 官方demo入门概念
  12. 51单片机(AT89S52)设计简单计算器(4位加减乘除)
  13. 校园一卡通管理信息系统的设计与实现(asp.net)
  14. BootStrap3 排版
  15. K - 链表的有序集合_Java
  16. 基于亚像素的边缘检测方法
  17. 戴尔7472黑苹果之旅
  18. dev stg prd 开发 测试 生产环境
  19. KETTLE实现循环批量多表抽取添加字段
  20. 真实可行的android 基站定位代码

热门文章

  1. 【校招VIP】线上实习 推推 书籍详情模块 产品脑图周最佳
  2. 【Python numpy模块】结合金融场景演示numpy模块的操作
  3. COLORREF、COLOR、RGB转化总结分析及在VC++中的使用
  4. 哈理工院赛训练题目 Kid-排列
  5. 电吹风哪个牌子比较好?
  6. ICRA 2023最新!自动驾驶传感器高效部署新方法!
  7. 最详细BIOS参数图解
  8. 基于QT平台webapi科大讯飞语音机器人2.0
  9. 小软件获取QQ好友是否隐身对你可见
  10. 开我的世界服务器什么系统好,《我的世界》1.0服务器哪个好 1.0服务器地址大全...