Contes 安装JLink Linux.(V420V) (2010-11-07 17:27)

本文介绍了解决在RHEL5上安装JLinkLinux遇到的libreadline.so.5符号未定义问题的方法。通过重新编译readline库并链接ncurses库解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Contes 安装JLink Linux.(V420V) (2010-11-07 17:27)
分类: ARM编程


Andrew Haung bluedrum@163.com
 
一.安装RHEL5的JLink Linux
--------------------------------------------------------------------
从官方网站下载JLink Linux版本
 
 
 下到本地解压.
[root@huisen JLink_Linux_V420h]# ls
45-jlink.rules  JLinkGDBServer  libjlinkarm.so.4       README
JLinkExe        JLink.log       libjlinkarm.so.4.20.8  start
 
 
在目录运行显示:
    提示.
./start
./JLinkExe: symbol lookup error: /usr/lib/libreadline.so.5: undefined symbol: PC
 
二.解决libreadline.so.5的找不到undefined symbob:PC
-------------------------------------------------------------------
  从上网的资料来看,这是一个常见的错误。随便搜一下 libreadline.so.5: undefined symbol: PC.发生大量人碰到这个问题。
   1.首先要可以确认一点
      包括网上很多碰到如下错误提示都归于一类.
undefined symbol: PC (/usr/lib/libreadline.so.5.2)
undefined symbol: UP (/usr/lib/libreadline.so.5.2)
undefined symbol: BC (/usr/lib/libreadline.so.5.2)
undefined symbol: tgetflag (/usr/lib/libreadline.so.5.2)
undefined symbol: tgetent (/usr/lib/libreadline.so.5.2)
undefined symbol: tputs (/usr/lib/libreadline.so.5.2)
undefined symbol: tgoto (/usr/lib/libreadline.so.5.2)
undefined symbol: tgetnum (/usr/lib/libreadline.so.5.2)
undefined symbol: tgetstr (/usr/lib/libreadline.so.5.2)
    这一些符号都是在保留libncurses或libtermcap 之中。检测系统中ncurses库,可以发现有这几个符号
 
readelf -a /usr/lib/libncurses.so | grep PC
02c1133c  0000f806 R_386_GLOB_DAT    02c12778   PC
248: 02c12778     1 OBJECT  GLOBAL DEFAULT   23 PC
 
 
     
readelf -a /usr/lib/libncurses.so | grep UP
02c1138c  00024b06 R_386_GLOB_DAT    02c12540   UP
   587: 02c12540     4 OBJECT  GLOBAL DEFAULT   23 UP
 
手动装载libreadline也会发现缺少几个符号
  
ldd -r /usr/lib/libreadline.so.5 | grep und
undefined symbol: PC    (/usr/lib/libreadline.so.5)
undefined symbol: UP    (/usr/lib/libreadline.so.5)
undefined symbol: BC    (/usr/lib/libreadline.so.5)
undefined symbol: tgetflag      (/usr/lib/libreadline.so.5)
undefined symbol: tgetent       (/usr/lib/libreadline.so.5)
undefined symbol: tputs (/usr/lib/libreadline.so.5)
undefined symbol: tgoto (/usr/lib/libreadline.so.5)
undefined symbol: tgetnum       (/usr/lib/libreadline.so.5)
undefined symbol: tgetstr       (/usr/lib/libreadline.so.5)
 
再检查libreadline.so.5和JLinkExe的依赖库,都没有发现libncurses.so或libtermcap.so
 
[root@huisen JLink_Linux_V420h]# readelf -a JLinkExe | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libjlinkarm.so.4]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libusb-0.1.so.4]
 0x00000001 (NEEDED)                     Shared library: [librt.so.1]
 0x00000001 (NEEDED)                     Shared library: [libreadline.so.5]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 
# readelf -a /usr/lib/libreadline.so.5 | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 
 2.解决方法
   
    一种解决办法是在,在使用libreadline库的程序,再重新编译,加入-lncurses 的链接。这种方法前提有应用程序的源码。但在这种情况没法得到JLinkExe的源码。只能想其它办法。
   
 
   另外一种办法是,在libreadline库加入ncurses的链接。
rpm -q readline 查询默认的readline库
         readline-5.1-1.1
因为它是开源库,可以到下到源码。从网上下到 readline-5.2.tar.gz.
   解压后在源码目录执行 ./configure --prefix=/usr --with-ncurses 生成Makefile
 
  make
  make install
 后冲掉/usr/lib下原来的版本,但是错误仍在,库仍然没有链接进去。
  
   检查源码发现readline-5.2下还有shlib来编译动态库。 在shlib这个目录下的Makefile中定义的变量SHLIB_LIBS = 是为空的。将其中改为
      SHLIB_LIBS = -lncurses
然后
  make
  make install
再次编译,检查库已经链接进去了
 
readelf -a /usr/lib/libreadline.so.5 | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libncurses.so.5]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 
运行./start执行,JLinkLinux 运行正常.出现提示了。
 
./start
SEGGER J-Link Commander V4.20h ('?' for help)
Compiled Oct 19 2010 14:02:03
Can not connect to J-Link via USB.
 
注意,不要在添加/删除程序界面去掉老的readline 5.1.1的库!,大量的库都依赖于他。如果强行删除,将导致整个GNONE的各种应用程序都被删除。我付出来教学机崩溃的代价才明白。只需要用 configure --prefix=/usr 直接冲到老版本即可

根据提供的引用内容,您遇到了一个名为"contes"的命令未找到的问题。要解决这个问题,您可以尝试以下几种方法: 1. 检查命令拼写:首先,请确保您输入的命令拼写正确。在这种情况下,您输入的命令是"contes",请确保没有拼写错误。 2. 检查命令是否存在:如果您确定命令拼写正确,但仍然收到"command not found"的错误消息,那么可能是因为该命令不存在于您的系统中。您可以尝试使用"which"命令来检查命令是否存在。例如: ```shell which contes ``` 如果命令不存在,您可能需要安装或配置相应的软件包。 3. 检查环境变量:有时候,命令未找到的问题可能是由于环境变量配置不正确导致的。您可以使用"echo"命令来检查环境变量是否包含该命令的路径。例如: ```shell echo $PATH ``` 确保命令所在的路径包含在环境变量中。如果不包含,您可以通过修改环境变量配置文件(如~/.bashrc或/etc/profile)来添加命令的路径。 4. 安装所需软件包:如果命令确实存在于您的系统中,但仍然无法找到,那么可能是因为您缺少相应的软件包。您可以尝试使用包管理器(如apt、yum或brew)来安装所需的软件包。例如: ```shell sudo apt install contes ``` 请注意,以上方法仅为常见解决方案之一,具体解决方法可能因系统和环境而异。如果以上方法仍然无法解决问题,请提供更多详细信息以便我们能够更好地帮助您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值