C项目静态库编译正常但主测试程序链接失败,如何修正Makefile?
问题原因
你的test_main_driver目录下的Makefile存在变量名拼写错误,定义的目标文件列表变量为OBJS,但链接规则中引用的是未定义的program_OBJS,导致链接阶段没有传入已编译完成的main.o,链接器找不到程序入口函数main,因此抛出符号未找到的错误。
修复方案
修改test_main_driver/Makefile中的链接规则,将引用的变量名替换为正确的OBJS即可:
原来的错误规则:
$(program_NAME): $(OBJS) $(LINK.c) $(program_OBJS) -o $(program_NAME)
修改为:
$(program_NAME): $(OBJS) $(LINK.c) $(OBJS) -o $(program_NAME)
可选优化
为了兼容不同版本链接器的依赖顺序检查,建议将库链接参数放在编译目标文件之后,调整后的规则更规范:
$(program_NAME): $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $(program_NAME) $(LDFLAGS)
修复后执行make clean && make即可正常生成可执行文件。
内容的提问来源于stack exchange,提问作者Qiang Xu
相关产品推荐
相关产品推荐

