最近参与的任务是ONVIF的重构。在把live555组播搞完后,就正式投入ONVIF的事了。主负责ONVIF的同事已经把代码重新做了一套框架出来,大体代码已经实现了,我就把它交叉编译整合到公司架构代码上。但在编译过程中因为一个问题导致花了一天的时间才解决。

gsoap生成的代码都比较大,编译时间非常久,最大的一个文件编译差不多要20分钟。如果用-g编译,这个文件达到60MB,使用-O3优化,也有大约20MB。我无意中用file查看生成的.o文件,发现其未stripped。当strip后,发现只有区区的10MB。于是就把生成的.o文件strip掉。由于架构代码使用库的形式,在编译成静态库时一切正常,于是接着整合到主函数。但在最终链接生成二进制文件时,即出现了链接错误,典型的“unresolved reference”问题,一开始以为是extern "C"原因造成的,找了半天,编译了半天,但没什么发现。奇怪的是,使用同事的代码在PC上可以正常的——此时,尚未意识到是因为strip的原因。

多方尝试未果后,无意看到一个函数体空实现的目标文件,PC上生成的和交叉编译生成的体积不同,用UE对比发现PC编译生成的可读的字符较多,——终于想到了strip了。暂时不管其它的,把Makefile里的strip注释掉,重新编译,经过漫长的等待,终于看到生成的二进制了,问题解决。二进制文件体积有6MB,还没加什么函数实现,文件还要再精简才行。

先前的live555卡了好久的组播问题,从单线程到多线程到多进程,再到live555时间戳跟踪,花了很多时间。最终发现是发送模块的变量使用问题。我意识到多线程分头要使用2个不同的队列,也知道要不同的锁,但代码里的信号量没有修改,不同线程使用同一个信号量使得数据混乱了,而为何会导致live555的时间戳出现问题,就不得而知了。

从这些经验教训中知道,出现问题先找找自己修改过什么地方,哪些可疑的。对于多线程操作,一定要注意静态变量、全局变量等,要做好同步机制。

李迟 2016.1.15 夜

遇到一个把.o文件strip后出现的奇怪问题相关推荐

  1. python做的游戏放到微信_【1、 创建一个python的文件,运行后,文字版方式模拟微信游戏“跳一跳?】...

    python脚本学习过程推荐 学习流程: 一:打础 1.找到合适的书籍(推荐Python核心编程2Dive into Python),大致读一次,循环啊判,常用类啊,搞懂(太难的跳过) 2.勤练习py ...

  2. 对已经存在Excel文件修改后保存时,会弹出一个询问对话框

    对已经存在Excel文件修改后保存时,会弹出一个询问对话框: ---------------------------       在当前位置发现已经存在名为"RESUME.XLW" ...

  3. JAVA CP936编码转utf8_对一个目录的文件从cp936转换成utf-8

    打开一个文件,确认能够无乱码打开 [xw@localhost work]$ vi NPOSP/src/sjl05.cpp 但是,这里打开的方式是以cp936的编码方式打开的. 编码的选择,记录在~/. ...

  4. PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...

  5. pyqt tablewidget 设置一行的背景_PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现...

    一.引言 最近网上会议很多,网上会议工具大多提供了录播的功能,有些会议内容比较精彩,但中间穿插有些无用的内容,或者有些只有几段精彩,大部分内容可以去除.这就需要对该录播文件进行剪辑,取其精华留存,这样 ...

  6. python文件读取下一个字符_python文件的读写总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  7. 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数

    给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数.            1.在文件中至少存在这样一个数?            2.如果有足够的内存,如何处理? ...

  8. oracle11gr2查看数据库状态,Oracle 11gR2数据库文件丢失后的恢复测试

    一.测试环境 数据库版本是Oracle 11gR2,在做完一份完全备份之后,关机,做一份快照,每一次开机之后都执行数次alter system switch logfile以产生归档日志. 之后的测试 ...

  9. mysql 拷贝数据库 表存在却打不开_mysql数据库文件复制后表打不开

    mysql数据库文件复制后表打不开找了很多方法最终解决了.InnoDB只有frm表结构,拷贝过去mysql后说表不存在网上说还要拷贝ibdata1文件,但这样的话会覆盖掉mysql本来有的ibdata ...

最新文章

  1. 实现分布式服务注册及简易的netty聊天
  2. 交换机SHOW命令,不知道路由器可以参考不·
  3. 优秀logo设计解析_优秀Logo设计!数学美的运用
  4. pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一比例阈值的数据列
  5. LVS(5)——关于ipvsadm第一次启动失败的原因
  6. mysql数据库root密码在哪个文件中_mysql - 本地数据库忘记了root用户的密码
  7. 前端转行大数据?没必要
  8. lua——alien库实现lua调用C动态链接库(dll、so)
  9. git clone 出现错误
  10. 使用Python预处理机器学习需要的手写体数字图像文件数据集
  11. 控制工程基础Chapter2 Mathematical models of systems
  12. matlab 中的矩阵分解
  13. http://blog.sina.com.cn/s/blog_6a01140c0100wimi.html
  14. python初体验(2)——面向对象篇
  15. SpringMVC自定义拦截器拦截请求后返回中文时乱码
  16. c51语言自定义头文件,C51语言头文件包括的内容有
  17. OpenCV之图像二值化与去噪
  18. SAS安装及过程中遇到的问题的解决办法
  19. python大纲图_干货!!python自学大纲!
  20. FreeBSD+XP双系统

热门文章

  1. 快手与美团达成互联互通合作:美团将在快手上线小程序
  2. 1899元起!iQOO Z5造梦空间配色明日正式开售
  3. 荣耀50样张公布:直出1亿像素 实际效果更出色
  4. 马云终于露面了!发表千字演讲
  5. iPhone 12 mini被质疑锁屏触摸不灵
  6. 揭秘了!小米透明电视所用处理器为联发科定制
  7. 很遗憾!iPhone 12内部CAD设计图流出:刘海并未缩小
  8. 百度世界无烟日搜索大数据:电子烟危害成00后关注焦点
  9. Zoom暂停中国个人用户注册,已免费注册用户仅限于加会使用
  10. 疫情向左、大基金向右,国产光刻胶走到了哪一步?