我正在创建一个命令行C++测试应用程序(可执行文件),以在我的rooted android设备上运行。未定义的引用错误 - rand
可执行文件使用多个预构建的C库,其中一个使用'rand()'。在链接状态期间,我得到错误“未定义的参考'rand'”
要检查路径设置是否正确,我尝试了下面的方法,但没有成功。
第一种方法:我在我的测试源中定义了rand()。
我注意到,我得到多发定义错误,第一个定义仿生为/ libc中/有/ stdlib.h中
方法二:使用兰特()在我的测试应用
通知我链接器不会抱怨这里未定义的符号
第三条道路:解除封存和归档所有的目标文件
发现我仍然收到未定义的引用错误。
当使用'rand'的C库被编译成使用C测试文件的可执行文件时,看不到所提到的链接器错误。
我无法修改预建的静态库,需要使用我的基于C++的测试应用程序库。
任何投入将非常受欢迎。
这听起来像库希望rand返回'int rand'而不是'unsigned int rand'。如果它是静态链接的,为什么要使用'hack'并编译/链接一个测试C文件? – 2012-03-29 14:00:18
rand是一个标准的C模块,并在创建共享对象或可执行文件时进行链接。提供给我的静态库使用rand()调用,并没有包含它的定义。 – Deepak 2012-03-30 05:16:15
我会建议寻找一个符号倾销。我知道rand()是什么,我发现你的静态库可能是针对与C库不同的版本编译的。你可以通过很多方式来清除它(提供你自己的rand,为C rand提供一个'wrapper'等等......),但你最好的选择是检查符号转储。我也会指导你http://stackoverflow.com/questions/4768180/rand-implementation – 2012-03-30 07:26:00