【无标题】c++ 提前检测未被链接到的库,并找到其位置

在编译C++代码生成.so动态库时,如果缺少链接某些库,编译可能不报错,但在运行时会出现错误。可以使用ldd检查.so文件的缺失依赖,然后通过c++filt解析undefinedsymbol找到对应函数,再用grep搜索包含该函数的源文件,逐一修复。例如,通过ldd发现_GlucoseSolver::add_clause_未链接,通过grep在指定目录下查找并修复相关文件。
摘要由CSDN通过智能技术生成

在编译 c++ 代码生成 .so 文件时,当由于某些库未被链接到时,编译过程不会报错,但是运行的时候会一点一点的报错,这样比较影响效率。所以我们可以用 ldd -r xxx.so 来查看该 .so 文件哪些函数没有链接到合适的库,再用 c++filt undefined symbol 查到对应的函数,再用类似于 grep -r “函数名”(双引号不能省) 目录来检索该目录下哪些文件包含了这个函数,定位到哪些文件,一个个地修改即可。
一个例子:

ldd -r a.so
return: undefined symbol: _ZN13GlucoseSolver10add_clauseERKSt6vectorIiSaIiEE (./a.so)

c++filt _ZN13GlucoseSolver10add_clauseERKSt6vectorIiSaIiEE
return: GlucoseSolver::add_clause(std::vector<int, std::allocator<int> > const&)

grep -r "add_clause" /home/huan/Pycode/trail/
return: 该目录下所有出现 add_clause 的代码所在行及其所在文件名。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值