当前位置:  技术问答>linux和unix

应用程序移植到RT5350路由器板子上运行出错

    来源: 互联网  发布时间:2017-05-24

    本文导语:  本帖最后由 wangbin531134211 于 2014-07-17 17:15:13 编辑 Linux上能正常运行的程序,使用Ralink_SDK中的mipsel-linux-g++编译,版本为3.4.2,放到板子上运行,出现错误: : can't resolve symbol '_Unwind_SjLj_Register' : can't resolve symbol '_ZN...

本帖最后由 wangbin531134211 于 2014-07-17 17:15:13 编辑
Linux上能正常运行的程序,使用Ralink_SDK中的mipsel-linux-g++编译,版本为3.4.2,放到板子上运行,出现错误:
: can't resolve symbol '_Unwind_SjLj_Register'
: can't resolve symbol '_ZNSt8ios_base4InitD1Ev'

我看了下这两个函数分别在buildroot-gcc342中的libgcc.a和libstdc++.a里面,
而我使用nm -l命令查看自己的动态库子项目(被应用程序依赖),显示
000af9fc T _Unwind_SjLj_Register	/home/winfred/RT288x_SDK/toolchain/buildroot/toolchain_build_mipsel/gcc-3.4.2/gcc/unwind-sjlj.c:122

0004e650 T _ZNSt8ios_base4InitD1Ev /home/winfred/RT288x_SDK/toolchain/buildroot/toolchain_build_mipsel/gcc-3.4.2/libstdc++-v3/src/ios_init.cc:125

这应该是已经编译到我的动态库中了吧?

我的编译器位置在 /opt/buildroot-gcc342/bin
看了http://blog.sina.com.cn/s/blog_602f87700100nyda.html这篇文章,以为是自己的toolchain位置有问题,
执行mipsel-linux-gcc -v 打印出以下信息
Reading specs from /home/winfred/RT288x_SDK/toolchain/buildroot-gdb/lib/gcc/mipsel-linux-uclibc/3.4.2/specs
Configured with: /home/winfred/RT288x_SDK/toolchain/buildroot/toolchain_build_mipsel/gcc-3.4.2/configure --prefix=/home/winfred/RT288x_SDK/toolchain/buildroot-gdb --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=mipsel-linux-uclibc --enable-languages=c,c++ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-shared --disable-nls --enable-threads --enable-multilib --enable-sjlj-exceptions : (reconfigured) /home/winfred/RT288x_SDK/toolchain/buildroot/toolchain_build_mipsel/gcc-3.4.2/configure --prefix=/home/winfred/RT288x_SDK/toolchain/buildroot-gdb --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=mipsel-linux-uclibc --enable-languages=c,c++ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-shared --disable-nls --enable-threads --enable-multilib --enable-sjlj-exceptions
Thread model: posix
gcc version 3.4.2

因此我将整个编译器解压到/home/winfred/RT288x_SDK/toolchain/buildroot-gdb下,但编译运行后还是出现同样的错误。
有高手知道这是什么原因吗?
谢谢

|
问题解决了,原因是我使用了libdl这个库,在程序中我是将SDK中的libdl.a静态编译到我的动态库中,今天偶然发现板子系统上的libdl.so与SDK中的libdl.so大小不一样。我的一个测试程序使用-ldl编译,在程序动态加载库时没问题,而使用SDK中提供的libdl.a静态编译的时候,出现段错误,因此怀疑是两边的libdl库不一致导致的,在Makefile中使用-ldl,问题解决。
但现在还有不明白的地方是板子上的操作系统就是用SDK里面的gcc编译的,为什么编译出来的libdl库与SDK编译器自带的libdl会不一样呢?
感谢楼上的回复,虽然没帮助解决,还是要给分的。

|
.a是静态库,你查一下这两个函数在哪个.so文件里面,复制到板子的/lib下

|
那你在编译的时候加入参数“-L(libPlatform.so所在目录) -lPlatform”试试看

|
目录不对,都放在/lib下面。或者指定LD_LIBRARY_PATH环境变量。

|
看上去是你的动态库引用了其它的动态库,你板子上的/lib上有没有libstdc++.so文件

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 如何将应用程序加到桌面或应用程序组?
  • 怎样开发在LINUX 上运行的应用程序,像WINDOWS桌面应用程序一样
  • 我要监测一台远程电脑的状态(未上线/上线但没打开每个应用程序/上线且打开应用程序),该如何作?
  • asp.net应用程序的生命周期和iis应用程序池
  • 手动执行应用程序ok,但用crontab(在正确的用户名下)运行应用程序就报-12545(tns连接错误),怎么解决?
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 终端打开应用程序,怎样使当终端退出时应用程序不退出.问了好多人,其实很简单.
  • 编程语言 iis7站长之家
  • 用SecureCRT或Putty 远程启动linux服务器上的一个应用程序,但是当我关掉SecureCRT的时候,应用程序也被关掉了,怎么能够做到我关闭客户
  • QT的应用程序中如何获取程序执行的路径?
  • 请问如何通过telnet的方式启动服务器(solaris)上的用.sh角本方式启动java写的应用程序,在退出telnet时服务器上的应用程序不会退出?
  • 把java源程序生成应用程序有哪些方法?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 一个程序能否控制其他应用程序?
  • 运行什么程序都提示没有找到msvbvm5.0.dll,因此这个应用程序未能启动
  • 走虚拟网卡内核程序和走物理网卡应用程序结合问题
  • 学了linux程序设计后能不能编写出应用程序
  • 请问如何设置驱动程序和应用程序的启动顺序和优先级呢?
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • java.exe-应用程序错误(程序一运行就报错)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3