Ubuntu20.04.4用Homebrew装g++12后编译报ld: cannot find -lm错误
解决Homebrew安装的g++12在Ubuntu20.04编译时找不到-lm的问题
问题分析
Homebrew安装的GCC未正确配置链接器路径,导致系统默认ld无法找到Homebrew版本的数学库(libm),或是链接器优先调用了系统旧版工具链。
可行解决方案
使用Homebrew GCC配套的链接器
直接指定用Homebrew自带的链接器替代系统ld,编译命令示例:g++-12 -std=gnu++20 main.cpp track.cpp -o track -fuse-ld=lld # 或指定Homebrew ld的绝对路径 g++-12 -std=gnu++20 main.cpp track.cpp -o track -fuse-ld=/home/linuxbrew/.linuxbrew/bin/ld配置环境变量优先搜索Homebrew库路径
检查当前环境变量是否包含Homebrew的lib路径:echo $LIBRARY_PATH若输出无
/home/linuxbrew/.linuxbrew/lib,执行以下命令添加(可写入/.bashrc或/.zshrc永久生效):export LIBRARY_PATH=/home/linuxbrew/.linuxbrew/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=/home/linuxbrew/.linuxbrew/lib:$LD_LIBRARY_PATH重启终端后再执行编译命令。
手动指定libm路径并调整参数顺序
链接器按顺序处理依赖,需将-lm放在源文件之后,同时指定Homebrew的lib路径:g++-12 -std=gnu++20 main.cpp track.cpp -o track -L/home/linuxbrew/.linuxbrew/lib -lm重新安装Homebrew GCC
若上述方法均无效,可能是安装文件损坏,重新安装:brew uninstall gcc brew install gcc安装完成后重启终端再尝试编译。
内容的提问来源于stack exchange,提问作者garrett_17
相关产品推荐
相关产品推荐

