解决办法:预先定义 STB_IMAGE_IMPLEMENTATION STB_IMAGE_STATIC 两个宏。
首先吐槽一下,网上的其他的一些内容都是瞎写,根本没有指出问题的根本原因,使用时出现异常情况不能自己解决也说明了C语言基础不牢固,
该头文件可以分为两种情况使用(推荐使用办法2,办法1中有解释原因)(任何一种情况都要在使用前预先定义 STB_IMAGE_IMPLEMENTATION 宏):
1、被当做头文件包含到别的文件中,则其不应该在不同的 .c、.cpp文件中被展开(注意:源文件的头文件会在预处理阶段将其头文件展开,也有可能会变成这种情况),否则相当于在不同的源文件中定义同名的C函数,再编译生成 .o文件时肯定会报重定义的错误。一个解决办法是只在一个源文件(.c .cpp)中展开该项。当然这不是最好的解决办法,C语言中为解决多个源文件包含相同的函数提供了更好的办法,相信你已经猜到了------static关键字,其修饰的函数和全局变量只在本文件中可见,这样就不会和其他文件冲突了,也就是情况2。
2、使用前预先定义 STB_IMAGE_STATIC ,稍微查看源码即可直到,添加该宏定义以后,函数会被static修改(否则为extern),完美的解决了重定义的问题。推荐大家使用。