一次debug遇到的疑惑 某天发现一个程序有点问题。祭上print大法,在关键的 lib_func() 函数里添加 print 调试信息,重新编译运行。 期望 print 出的信息一点都没有,但是程序确确实实又执行过了 libfunc() ,因为除了添加的调试 print 没有执行 ...
最近,给同事定位了一个符号表的冲突问题,简单记录一下。 A代码作为静态链接库,被包含进了B代码,然后编译成了动态链接库,B.so A代码同时作为静态链接库,被编译进入了main的主代码。 main函数调用B.so里面的函数,同时B.so里面的函数调用了A代码,结果进程异常退出了。 查看符号表,发现调用的A代码,其实运行的是直接编译进入main主函数的代码,而不是B.so里面包含的A代码。 而且比较 ...
2017-12-04 09:07 0 1574 推荐指数:
一次debug遇到的疑惑 某天发现一个程序有点问题。祭上print大法,在关键的 lib_func() 函数里添加 print 调试信息,重新编译运行。 期望 print 出的信息一点都没有,但是程序确确实实又执行过了 libfunc() ,因为除了添加的调试 print 没有执行 ...
项目调试过程中遇到Linux环境下动态库so中全局变量相互冲突问题,问题具体描述如下: 单个进程 A运行时需要加载两个动态库B.so与C.so ,这两个动态库均链接了静态库D.a。静态库 D.a存在全局变量且只能初始化一次。进程A加载B.so 正常,加载C.so 提示D.a 初始化 ...
jQuery中 $ 符号的冲突问题是常见问题之一。 在jQuery中, $是jQuery的别名,为了书写方便,我们更习惯用$('#id')这一类的方式来书写代码。当同一页面引用了jQuery多个版本或者jQuery与某些其他js库产生冲突,控制台就会 ...
demangle过了的符号名称; -D 打印动态符号; -l 使用对象文件中的调试信息打印出所在源 ...
的符号名称; -D 打印动态符号; -l 使用对象文件中的调试信息打印出所在源文件及行号; -n ...
所在对象文件名称; -C 输出demangle过了的符号名称; -D 打印动态符号; ...
最直接的就用 ldd + 可执行文件: 可以看到可执行文件需要哪些动态库,以及在当前环境下实际连接到的路径。 除了ldd,还有一些其它工具: readelf 都可以看file 查看文件类型strings 查看目标文件里所有可打印的字符串,或者非文本文件的 loadable ...
主要参考博客gcc创建和使用静态库和动态库 对于熟悉windows的同学,linux上的静态库.a相当于win的.lib,动态库.so相当于win的.dll. 首先简要地解释下这两种函数库的区别,参考《Linux程序设计》 1. 静态库也被称为归档文件(archive,因此创建命令是ar ...