问题
出现以下编译错误,
/media/data/lib/libbacktrace.so: undefined reference to mempool_init' /media/data/lib/libbacktrace.so: undefined reference tomempool_free’
/media/data/lib/libbacktrace.so: undefined reference to _UIarm_full_mask' /media/data//lib/libbacktrace.so: undefined reference tomempool_alloc’
原因
@bogon:/media/data/lib$ readelf -s libbacktrace.so | grep mempo
85: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_init
87: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_free
184: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_alloc
535: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_init
537: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_free
634: 00000000 0 NOTYPE GLOBAL DEFAULT UND mempool_alloc
@bogon:/media/data/lib$ readelf -s libunwind-arm.so | grep mempo
45: 00000000 0 FILE LOCAL DEFAULT ABS mempool.c
372: 00002104 184 FUNC LOCAL DEFAULT 9 mempool_init
373: 00002278 160 FUNC LOCAL DEFAULT 9 mempool_free
401: 000021bc 188 FUNC LOCAL DEFAULT 9 mempool_alloc
注意上面的LOCAL与GLOBAL,就是通俗意义讲的static和global的变量,如果要link的函数在它所在的库里面是LOCAL的,那就要去改他的定义,不能是static的。
参考
https://www.cnblogs.com/foohack/p/4103074.html
本文详细解析了在编译过程中遇到的libbacktrace.so库中mempool_init, mempool_free和mempool_alloc函数未定义引用的问题。通过readelf命令检查发现,这些函数在库中被声明为LOCAL,而非GLOBAL,导致链接失败。文章提供了修改库文件,将LOCAL函数改为GLOBAL的解决方案。
4370

被折叠的 条评论
为什么被折叠?



