0%

Linux环境下开发与应用备记

处理问题要流程

binutils工具

  • 查看动态库内的函数符号.
1
aarch64-linux-gnu-readelf --dyn-syms /lib/aarch64-linux-gnu/libssl.so.1.0.0  | grep "TLSv1_2_method"

查看程序链接动态库的依赖.

  • 查看当前系统的程序链接动态库的依赖,可以使用ldd这个工具,ldd -u可以直接列出无法链接到的库名.如果是在交叉编译环境下可以使用
    对应<CROSS_COMPILE>-readelf读取,使用如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~$ aarch64-linux-gnu-readelf -d jtagd | grep "NEEDED"
0x0000000000000001 (NEEDED) Shared library: [libccl_ver.so]
0x0000000000000001 (NEEDED) Shared library: [libSafeString.so]
0x0000000000000001 (NEEDED) Shared library: [libboost_unit_test_framework.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libboost_program_options.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libboost_system.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libboost_filesystem.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libboost_serialization.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libboost_regex.so.1.59.0]
0x0000000000000001 (NEEDED) Shared library: [libnsl.so.1]
0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgomp.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x0000000000000001 (NEEDED) Shared library: [ld-linux-x86-64.so.2]

程序长时间运行,无stdout输出的问题

  • 可以使用strace <program>方法运行它,查看它做了那些动作.对于正在运行的程序可以使用strace -p <PID>通过attatch它的
    PID来查看它运行的详情.如果只想查看它的网络相关的调用,可以使用如下命令过虑掉其它信息干扰:
1
2
3
4
5
6
7
8
9
strace -e trace=network jtagconfig
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=26660, si_uid=1000, si_status=0, si_utime=0, ssi_stime=0} ---
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_LINGER, {l_onoff=1, l_linger=10}, 8) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(1309), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
recvfrom(3, "", 2, 0, NULL, NULL) = 0
recvfrom(-1, 0x1b066ac, 2, 0, NULL, NULL) = -1 EBADF (Bad file descriptor)
  • GLIBC的兼容问题
1
2
https://stackoverflow.com/questions/2856438/how-can-i-link-to-a-specific-glibc-version
https://stackoverflow.com/questions/4032373/linking-against-an-old-version-of-libc-to-provide-greater-application-coverage/5977518
  • 查看 core dump file

  • 下面错误处理,是没设置正的运行环境变量, 设置export LC_ALL=C就可以解决.

    1
    2
    : Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.

谢谢支持

  • 微信二维码: