static declaration follows non-static declaration


前段時間工作中要為android編譯跨平台的第三方庫,遇到了arc4random有關函數的“static declaration follows non-static declaration”問題,那是因為ndk提供的運行庫對arc4random支持不一樣,或只支持其它某幾個函數或只支持其它另個幾個函數,而第三方庫的自動配置腳本遇見的要么全支持要么全不支持,提供了一份靜態實現的代碼。這是函數在運行庫頭文件中聲明之后在實現代碼中又聲明了靜態。解決也只能是每個cpu體系版本手動修改了。

今天在編譯openssl 0.98b版也遇到這個錯,這次是變量。下面就是這個元凶的真身:

OPENSSL_IMPLEMENT_GLOBAL。

它想將變量名的變量隱藏成靜態,導出一個訪問函數,並且宏的使用可以對變量初始化,宏的結尾是沒有";"封閉語句。

OPENSSL_IMPLEMENT_GLOBAL(int, some_var) = 1;你get到了嗎。

然而卻來了一個顯式extern聲明,然后引用, 最后來static定義並初始化。

沒有IDE分析項目,找一個宏還真不好找,編譯出錯時,並不會提示宏在那里定義,只是指着宏有錯,你還不知道這個宏是什么用意。雖然可以遍歷目錄從文件中找匹配字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM