问题描述
最近在用yolo做目标检测的项目。yolo本身的框架接口做的不好,因此想把它编译成动态链接库进行使用。但是对项目生成可执行文件的过程中,编译是没有问题的,但是链接的时候报错:
/libyolo.so undefined reference compute_box_iou
compute_box_iou
是我加入yolo框架里面的一个函数,讲道理应该是在libyolo.so里面能找到的。我用nm指令查看libyolo.so也是用这个函数的。
nm libyolo.so | grep 'compute_box_iou'
>> U compute_box_iou
一开始没懂compute_box_iou
前面的U
是什么意思,也就没管,接下来用ldd -r
继续查看libyolo.so
ldd -r libyolo.so
结果是这样的
libxx.so => [somepath]
...
undefined symbol: compute_box_iou (./libyolo.so)
发现libyolo.so里面居然compute_box_iou是未定义的,难道说明编译的时候没有把compute_box_iou的实现加进去?最后去查看了一下makefile,发现之前手残把编译compute_box_iou.cpp那部分注释掉了。解注释之后一切正常。
最后查看了nm的定义,发现前面的U
的意思本身就是undefined的意思…