Keil MDK项目引入stb_image.h后出现__stdout符号重定义错误的求助
Keil MDK项目引入stb_image.h后出现__stdout符号重定义错误的求助
各位大佬好,我最近在用Keil MDK开发MCU项目,碰到一个棘手的问题,想请教下大家怎么解决。
事情是这样的:我在main.c里引入了stb_image.h之后,编译链接时报了这个错误:
.\Objects\JinshenTekDigitalLightingBoard(M433LE8AE).axf: Error: L6200E: Symbol __stdout multiply defined (by stdio_streams.o and retarget.o).
先给大家说下我的项目工具链信息,方便排查:
- Toolchain: MDK Professional 5.36 (Flex) Version: 5.36.0.0
- Toolchain Path: C:\Keil_v5\ARM\ARMCC_506build750\Bin
- C Compiler: Armcc.exe V5.06 update 6 (build 750)
- Assembler: Armasm.exe V5.06 update 6 (build 750)
- Linker/Locator: ArmLink.exe V5.06 update 6 (build 750)
- Library Manager: ArmAr.exe V5.06 update 6 (build 750)
- Hex Converter: FromElf.exe V5.06 update 6 (build 750)
- CPU DLL: SARMCM3.DLL V5.36.0.0
- Dialog DLL: DCM.DLL V1.17.3.0
- Target DLL: NULink\Nu_Link.dll V3.16
- Dialog DLL: TCM.DLL V1.53.0.0
我自己排查了一下,追踪项目里的retarget.c文件,发现里面确实定义了FILE __stdout这个符号;现在应该是引入stb_image.h之后,它间接触发了标准库中stdio_streams.o里的__stdout也被编译进来,结果就导致链接时符号重定义了。
有没有大佬知道怎么解决这个问题呀?比如能不能让stb_image.h不牵扯到标准库的stdout相关内容,或者调整retarget的定义方式来避免冲突?
备注:内容来源于stack exchange,提问作者old cat
相关产品推荐
相关产品推荐

