stb_image multiple definition of first defined here 多文件包含问题
2024-09-02 14:20:05
首先吐槽一下,网上的其他的一些内容都是瞎写,根本没有指出问题的根本原因,使用时出现异常情况不能自己解决也说明了C语言基础不牢固,
该头文件可以分为两种情况使用(推荐使用办法2,办法1中有解释原因)(任何一种情况都要在使用前预先定义 STB_IMAGE_IMPLEMENTATION 宏):
1、被当做头文件展开到别的文件中,则其不应该在不同的 .c、.cpp文件中被展开(注意:源文件的头文件会再预处理阶段将其头文件展开,也有可能会变成这种情况),否则相当于在不同的源文件中定义同名的C函数,再编译生成 .o文件时肯定回报重定义的错误。一个解决办法是只在头文件中展开stb_image.h和一个源文件中展开该项。当然这不是最好的解决办法,C语言中为解决多个源文件包含相同的函数提供了更好的办法,相信你已经猜到了------static关键字,其修饰的函数和全局变量只在本文件中可见,这样就不会和其他文件冲突了,也就是情况2。
2、使用前预先定义 STB_IMAGE_STATIC ,稍微查看源码即可直到,添加该宏定义以后,函数会被static修改(否则为extern),完美的解决了重定义的问题。推荐大家使用。
最新文章
- 纪念我sgu第一个10题!
- Centos最小化安装后联网配置
- Android内存管理(3)缓存不要用SoftReference, 用android.util.LruCache
- 【风马一族_Android】 图能
- Laravel Controllers
- C# 循环获取目录
- JavaScript之cookie
- libcurl的使用问题“Expect100-continue”
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
- Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
- [51nod1310]Chandrima and XOR
- Hadoop问题:The auxService:mapreduce_shuffle does not exist
- android studio中使用lambda
- Linux禁止ping、开启ping设置
- 精读《Serverless 给前端带来了什么》
- C++标准库第二版笔记 2.1
- C# 利用SharpPcap实现网络包捕获嗅探
- 5.21http网页基础
- 《linux就该这么学》第三节课 第二节命令笔记
- IIS远程发布(Web Deploy)