c++在编译中遇到符合不存在如何解决?

今日问题:symbol 不存在

: symbol lookup error: ./libinterface.so: undefined symbol:

_ZN10CMySQLItem13ExecuteDirectEPKcmi

一般是没有引用第三方库 没有编译好

今天竟然耗费如很长时间解决

记录一下

解决过程:

如何判断一个函数来源编译的那个库 并且包含在改库中 因为一个动态库引用了很多其他库 (静态库和动态库)

  1. 搜索这个函数在那个.h .cpp如何实现的

2 问题升级 很可惜现实告诉你 别人实现你是看不到代码 寻找编译动态库的makefile 确定动态库和静态库的范围

3 问题升级 如果没有makefile如何确认呢

ldd .so 方式来确认 引用那些第三方库

4 问题升级

如果是这个函数在静态库呢 ldd 不起作用 巧妇难为无米之炊 回到3 必须找到对应makfie或者其他 (暂时想到 有更好方法吗?)

5 最后确认了是静态库有问题

问题有来了

这个符合根本就么找到

问题 nm libBusinessEquipdb.so.0.1 |grep aadfdfdf 不存在符号是没有提示的 (这个必须注意) 这个傻了。 产生怀疑 全部库我都寻找一遍为啥还没有呢 必须寻找出证据来

6 为了确认别人程序编译有问题 对比历史库

采取方式是 nm xx.a |grep xxxx

nm xxx.so 对比上个版本(可以正常运行) 这个版本不可以运行差异

多出一个符号: 0000000000113620 t _ZN10CMySQLItem13ExecuteDirectEPKcm U _ZN10CMySQLItem13ExecuteDirectEPKcmi

竟然多一个i 自己没有看出来: 自己没看出来

c++支持函数重载 函数原来是2个参数 现在增加到3个参数 你竟然没有看出来 你以为自己代码 makefiel等有问题 白白浪费一天时间。

最后确认 同类重载函数 确认连接mysql静态库编译有问题

用对比工具对比nm 两个库之间差异 函数进行重载 来确认历史变化

函数原来是2个参数 现在增加到3个参数

扩展思考

问题来了 举例

A 引用B库 但是B库编有问题 是因为B没有引用c库 如何解决 A 同时引用B和C库 只要符存在就可以了

原文发布于微信公众号 - 架构说(JiaGouS)

原文发表时间:2016-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏栗霖积跬步之旅

java并发编程的艺术——第四章总结

第四章并发编程基础   java语言是内置对多线程支持的。   为什么使用多线程:     首先线程是操作系统最小的调度单元,多核心、多个线程可以同时执行,能够...

28070
来自专栏栗霖积跬步之旅

java多线程编程核心技术——第一章总结 1.5sleep()方法

1.1进程、多线程的概念及线程的优点 进程的概念: 百度百科讲解: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和...

216100
来自专栏java一日一条

Java 类加载机制详解

Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器...

12010
来自专栏owent

Lua 挺好用的样子

其实对于理解Javascipt的人来说,Lua也很容易理解,因为他们太多的地方相像了。

22430
来自专栏码云1024

net框架运行原理

29230
来自专栏java 成神之路

并发编程基础知识点

35860
来自专栏猿人谷

进程和线程的区别

进程和线程的区别 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独...

24750
来自专栏java工会

Java 动态代理及 RPC 框架介绍

所谓动态代理,指的是语言提供的一种语法,能够将对对象中不同方法的调用重定向到一个统一的处理函数中来。 python重写__getattr__函数能够做到这一点,...

12610
来自专栏数据小魔方

左手用R右手Python系列——异常捕获与容错处理

一套稳健的代码体系,必须能够包容所有可能出现的错误情况并做出针对性处理,要想达到这个目标,务必要对异常捕获与容错处理有深入的了解和认识。 秉着初学者入门探索的...

308100
来自专栏后端技术探索

利用 PHP 名称空间编写可读且可维护的代码

“Conan 是我榜样。” 如果我在餐桌上说这句话,我儿子会以为我说的是游戏 “野蛮人柯南”,而我妻子会以为我说的是脱口秀主持人 Conan O'Brien。这...

13520

扫码关注云+社区

领取腾讯云代金券