static declaration follows non-static declaration

Posted bbqz007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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分析项目,找一个宏还真不好找,编译出错时,并不会提示宏在那里定义,只是指着宏有错,你还不知道这个宏是什么用意。虽然可以遍历目录从文件中找匹配字。

以上是关于static declaration follows non-static declaration的主要内容,如果未能解决你的问题,请参考以下文章

AS使用lombok注解报错:Annotation processors must be explicitly declared now. The following dependencies on

Accidental override: The following declarations have the same JVM signature (getWindow()Landroid/vie

Accidental override: The following declarations have the same JVM signature (getWindow()Landroid/vie

成功解决:declared ‘static‘ but never defined

成功解决:declared ‘static‘ but never defined

Eclipse下关于The serializable class UsersServlet does not declare a static final serialVersionUID field