You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下修改make默认链接工具:解决math.h函数未定义问题

解决make编译含math.h的C程序时函数未定义的问题

首先纠正一个误解:你看到错误里的ld不是make直接调用的,是cc(Ubuntu里默认是gcc的软链接)在编译的链接阶段自动调用的ld,问题根源不是默认链接工具不对,而是没有链接数学库libm——math.h里的pow、sqrt这些函数属于libm,gcc不会自动链接这个库,必须手动加-lm参数。

下面给几种解决方法:

临时快速解决

直接跳过make,用gcc手动编译:

gcc problem2.c -o problem2 -lm

用Makefile解决(推荐)

如果要继续用make,有两种方式:

方式1:写自定义Makefile

在你的代码目录下创建一个名为Makefile的文件,内容如下:

problem2: problem2.c
	gcc problem2.c -o problem2 -lm

注意:第二行开头必须是Tab键,不能用空格。然后直接在终端运行make即可。

方式2:修改make的默认编译变量

make有默认的编译变量,你可以设置LDFLAGS来添加链接参数:

  • 临时生效(仅当前终端会话):
    export LDFLAGS="-lm"
    make problem2
    
  • 永久生效:
    把export LDFLAGS="-lm"添加到你的~/.bashrc或~/.profile文件末尾,然后运行source ~/.bashrc(或对应的文件)让设置生效,之后再用make编译就会自动带上-lm参数。

关于默认链接工具和Makefile位置

  • 系统默认的make规则(当你没有自定义Makefile时用的规则)在/usr/share/make/default.mk(Ubuntu系统),但不建议直接修改这个文件,容易影响其他项目。
  • Ubuntu里cc默认指向gcc,你可以用ls -l /usr/bin/cc查看软链接指向,不需要修改默认链接工具,只要添加链接参数就能解决问题。

内容的提问来源于stack exchange,提问作者enthusiasm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:22:14