最近用過了 GPUImage 做美顏功能,為了防止沖突把里面的類名改了,但是有些全局的變量沒有注意到,沒有改名。我們做的是SDK靜態庫,結果我把庫給出去后,第三方也用到了GPUImage,編譯鏈接的時候并沒有報沖突,但是程序跑起來的時候掛掉了。后來跟了一下,奔潰原因如下://下面的數組是個全局變量// BT.709, which is the standard for HDTV.const GLfloat kColorConversion709[] = { 1.164, 1.164, 1.164, 0.0, -0.213, 2.112, 1.793, -0.533, 0.0,
};在另外一個文件中用extern引用extern const GLfloat kColorConversion601[];使用該值得地方,夾斷點調試,正常 _preferredConversion 賦值后為 1,有問題的時候,從kColorConversion601 內存拿不到值,訪問內存崩潰:_preferredConversion = kColorConversion601;問題:上面說的全局變量,在SDK中一共有兩份,沒有編譯鏈接錯誤,這是什么原因,能說下具體編譯鏈接的過程嗎?猜想是有兩份相同變量,去找變量的時候地址錯誤了,這個過程具體是怎樣的,很想知道如果調整下庫的鏈接順序,奔潰的問題可以解決,感覺挺奇怪的希望了解到朋友給講一下,雖然問題找到了,也解決了,但是很想知道為什么?### 問題描述問題出現的環境背景及自己嘗試過哪些方法相關代碼// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)你期待的結果是什么?實際看到的錯誤信息又是什么?
兩份相同C/C++全局變量鏈接沒問題,運行崩潰的問題
慕的地8271018
2019-01-02 11:22:11