stb_image multiple definition of first defined here 多文件包含問題

首先吐槽一下,網上的其他的一些內容都是瞎寫,根本沒有指出問題的根本原因,使用時出現異常情況不能自己解決也說明了C語言基礎不牢固,

該頭文件可以分為兩種情況使用(推薦使用辦法2,辦法1中有解釋原因)(任何一種情況都要在使用前預先定義  STB_IMAGE_IMPLEMENTATION 宏):

1、被當做頭文件展開到別的文件中,則其不應該在不同的 .c、.cpp文件中被展開(注意:源文件的頭文件會再預處理階段將其頭文件展開,也有可能會變成這種情況),否則相當於在不同的源文件中定義同名的C函數,再編譯生成 .o文件時肯定回報重定義的錯誤。一個解決辦法是只在頭文件中展開stb_image.h和一個源文件中展開該項。當然這不是最好的解決辦法,C語言中為解決多個源文件包含相同的函數提供了更好的辦法,相信你已經猜到了——static關鍵字,其修飾的函數和全局變量只在本文件中可見,這樣就不會和其他文件衝突了,也就是情況2。

2、使用前預先定義 STB_IMAGE_STATIC ,稍微查看源碼即可直到,添加該宏定義以後,函數會被static修改(否則為extern),完美的解決了重定義的問題。推薦大家使用。