关于"symbol lookup error xxxxx , undefined symbol"问题的解决方式

今天在测试基于netlib实现的数据包处理模块时,突然提示symbollookup error gxio_mpipe_init , undefined symbol问题。通过查阅资料对于该问题大部分的问题原因都是动态库的版本过旧,导致应用程序找不到对应的符号而引起的。

但是,通过分析Makefile文件和更新tilera平台上的gxio所依赖的动态库并不能解决上述问题。后来通过nm配合ldd终于解决了问题。分析步骤如下:

  1.  用ldd测试应用层序所依赖的动态库
  2. 使用nm + grep分析gxio相关的动态库下是否包含gxio_mpipe_init符号
  3. 经nm检测发现gxio相关的动态库都不包含gxio_mpipe_init,如$nm libgxio.so | grep gxio_mpipe_init。但gxio静态库(libgxio.a)包含gxio_mpipe_init
  4.  修改应用程序的 Makefile ,将gxio的静态库连接到应用程序中,编译测试问题解决。
  5.  导致上述问题的愿意就是应用程序依赖的gxio动态库中没有gxio_mpipe_init所对应特定的符号,导致运行时出现问题。

总结:导致该问题的原因一般就是动态库的版本过旧,导致应用程序找不到对应的符号,可以通过更新动态库使之支持确实的符号解决问题,分析过程中可以借助nm和ldd工具。

 

                                                                关于

                                                               关注公众号“奔跑的码仔”获取更过优质内容

你可能感兴趣的:(Linux,embedded,development,C/C++)