遇到了一个编译问题
armbi-v7编译正常通过,但是arm64-v8编译却提示找不到函数
仔细看了mk文件也没找到问题,后来发现函数声明的时候一个参数用了 uint32_t,然后在函数定义的时候用的是size_t,在32位平台上,size_t 就是unsigned int,所以32位编译没问题,但是用到64位编译时,size_t就是unsigned long了,这时候编译器就会发现参数类型不一致,报错找不到函数
顺便记个tips,大型工程中存在很多宏定义调用函数,有些定义中存在着很多goto语句,这时就要注意了,一定要在函数入口处定义所有的变量,如果在goto后面定义初始化了新变量,就会报错交叉初始化。
因为这些goto语句都是隐藏在宏定义下的,有时候得慢慢排查,所以如果工程用了大量的宏控制调用,就注意把变量定义到函数入口处。
再多说一句,.c文件要求定义必须在函数最前面,如果在函数中间出现新变量定义就会报错,但.cpp取消了这一限定。