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

相同版本Linux、GCC、LD环境下链接顺序规则不一致问题求助

相同版本Linux、GCC、LD环境下链接顺序规则不一致问题求助

各位大佬好,我碰到了一个百思不得其解的问题,想请大家帮忙分析下:

我有一台台式机和一台笔记本,都装的是Ubuntu 22.04.4 LTS系统,台式机只是多装了些我觉得无关紧要的小工具,两台机器的主编译器都是gcc-12,链接器ld版本也都是2.38,甚至/etc/ld.conf.d目录里的内容都完全一致。

目前我在开发一个C语言共享库,现在有两个模块:symbols.o和stringvec.o。为了调试方便,我在symbols.c里加了个main函数,所以当前相当于在编译一个可执行程序。

我的Makefile内容如下:

CFLAGS=-g -I incl
LDFLAGS=-lm

all:    symbols

symbols: stringvec.o symbols.o

两台机器上执行make时,输出的编译命令完全相同:

cc -g -I incl   -c -o symbols.o symbols.c
cc -g -I incl   -c -o stringvec.o stringvec.c
cc -lm  symbols.o stringvec.o   -o symbols

但结果却不一样:台式机上最后一步链接完成后直接回到命令行,生成的symbols程序能正常运行;可笔记本上这一步会报链接错误,说找不到sqrt这类数学库函数(我确实用到了libm里的函数)。

我知道链接库的顺序很关键,按道理-lm应该放在目标文件后面才对,但奇怪的是为什么台式机上这么写就能正常链接成功呢?两台环境明明几乎完全一样啊,有没有大佬能帮我捋捋原因?

备注:内容来源于stack exchange,提问作者John Collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:23:02