最近一个项目,用了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成功