stb_image multiple definition of first defined here 多檔案包含問題

為彩而殤發表於2020-07-06

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

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

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

2、使用前預先定義 STB_IMAGE_STATIC ,稍微檢視原始碼即可直到,新增該巨集定義以後,函式會被static修改(否則為extern),完美的解決了重定義的問題。推薦大家使用。

相關文章