我发现 bionic 的 rand()
函数在不包含 stdlib.h
的情况下无法工作
extern int rand(void);
static void foo()
{
int a = rand();
}
int main()
{
foo()
return 0;
}
glibc
的结果:
编译成功
仿生
的结果:
编译不成功
error: undefined reference to 'rand'
在 bionic
源中,我们有以下实现:
static __inline__ int rand(void) {
return (int)lrand48();
}
为什么它适用于 glibc
但不适用于 bionic
最佳答案
glibc 的 rand() 是一个位于库中的“普通”函数。我怀疑您收到有关符号未从编译器定义(无法找到它)的警告,但由于该函数存在于库中,链接阶段仍然可以找到并链接到它。
bionic 的 rand() 是头文件中的 static inline
,这意味着除非包含头文件,否则它甚至不会被定义。由于编译器在没有 include 的情况下无法找到它,并且它不存在于链接器可以从中解析它的任何库中,因此编译将在链接阶段失败。
关于android - rand() 函数仿生与 glibc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694875/