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
相关产品推荐
相关产品推荐

