android – 未定义的引用错误 – rand

android – 未定义的引用错误 – rand,第1张

概述我正在创建一个命令行C测试应用程序(可执行文件),在我的root设备上运行. 可执行文件使用多个预构建的C库,其中一个使用’rand()’.在链接状态期间,我得到错误“未定义的’rand’参考” 要检查路径是否设置正确,我尝试了以下方法但没有成功. 第一种方法:我在测试源中定义了rand(). 我注意到我得到了多个定义错误,第一个定义是在bionic / libc / include / stdl 我正在创建一个命令行C测试应用程序(可执行文件),在我的root设备上运行.

可执行文件使用多个预构建的C库,其中一个使用’rand()’.在链接状态期间,我得到错误“未定义的’rand’参考”

要检查路径是否设置正确,我尝试了以下方法但没有成功.

第一种方法:我在测试源中定义了rand().

我注意到我得到了多个定义错误,第一个定义是在bionic / libc / include / stdlib.h中

第二种方法:在我的测试应用程序中使用rand()

我注意到链接器不会在这里抱怨未定义的符号

第三种方法:取消归档和归档所有目标文件

发现我仍然得到未定义的引用错误.

当使用’rand’的C库使用C测试文件编译成可执行文件时,看不到所提到的链接器错误.

我无法修改预构建的静态库,需要将库与基于C的测试应用程序一起使用.

任何投入都将非常受欢迎.

解决方法 没有足够的评论如此评论……

如果你查看bionic的stdlib.h,你会看到rand()被定义为

static inline int rand(voID){…}

即函数的实际代码在头文件中.

这就是您的第一种方法为您提供多重定义错误的原因.

第二种方法成功的原因相同,并且(因为函数是内联的)在目标文件中不生成’extern’引用以导致搜索任何库.

下一个.您的C代码将链接到libc或libstdc(您需要检查).您的预构建静态库显然是针对stdlib.h编译的,该stdlib.h没有内联实现的rand().

您需要在静态上执行LDD(或readelf)命令,并查看它所寻找的库在您的平台上不存在.该库很可能与仿生库具有相同的名称,它不会导出rand()符号,因此加载器无法解析引用.

现在,至于修复这个…你能否至少重建静态库,如果不改变它们?您的C测试文件是否为Android或本机交叉编译?

总结

以上是内存溢出为你收集整理的android – 未定义的引用错误 – rand全部内容,希望文章能够帮你解决android – 未定义的引用错误 – rand所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存