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

