windows mingw编译环境 报重复定义的问题

本文介绍了在Windows MingW编译环境下遇到的重复定义错误,详细分析了错误产生的原因——两个源文件分别包含了相同的函数定义。解决方法是在CFLAGS中添加特定参数以避免不带static的inline函数导致的重复定义问题。同时,讨论了inline关键字的正确使用,包括在头文件中使用`static inline`的必要性,以及为何将inline函数放在头文件中以确保代码可见性和优化效果。
摘要由CSDN通过智能技术生成

最近一个项目,用了mingw编译环境,报重复定义
xxxxx : multiple definition of _Exit
xxxxx: first defined here
xxxxx:multiple definition of llabs

multiple definition of atoll
multiple definition of strncasecmp
multiple definition of wtoll

好多,经过分析发现,原因是两个.c文件,每个文件里面都含有这些函数的定义,所有链接的时候报重复了,使用

x86_64-w64-mingw32-gcc.exe -E xx.c > a.txt

把预处理之后的内容导入到一个文件中,然后搜索这些重复定义的函数名,果然,原来都是一些应该inline的函数,但是前面没加static, 并且不知道什么原因竟然没有inline,就导致了重复定义了。
仔细查看里面头文件中的位置,然后到头文件中找到对应的位置,分析原因,发现了一个解决方案,就是CFLAGS里面加入一个参数

-D__CRT__NO_INLINE

这样预处理之后就不会包含那些不带static的inline了。

根源,应该是在windows的环境中的宏定义出现了问题,或者是某些对inline的处理的bug,本来想inline,但是没有inline成功࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值