嵌入式Linux 调试常用工具与知识

常用工具

  1. Linux端查看.a/.so库文件信息,包含架构等等
readelf -h XXX.a

在这里插入图片描述
2. 静态库(.a) 与 动态库(.so) 的详解
3. 交叉编译指定安装路径,设置交叉编译器
4. 编译动态库与静态库
5. Linux列出当前路径下指定后缀的文件

#result为重定向输出
find  ${PWD}  -name '*.c' > result
  1. 引用静态库时说找不到库中的函数,但用nm能看到那个函数?
  1. 考虑是不是C++和C混合使用了
  2. 如果使用了cmake,依赖顺序很重要,被依赖的要放在右边

参考:linux下程序链接多个静态库,提示找不到函数链接的问题。
7. cmake /start.S:86:对‘main’未定义的引用

考虑依赖顺序的问题,把控制台的日志再往前翻一翻,看哪里出错了

  1. C文件 CMakeList.txt编译器配置错误的问题 error:invalid conversion from ‘int’ to ‘LAYER_TYPE’ [-fpermissive]…
  2. 海思自己重新实现了securec,所以在hilinux系统中可以使用snprintf_s,memcpy_s这些,但是要特别注意cmake链接的时候要把被依赖的放在最右边。
  3. cmake target_link_libraries 链接库顺序
  4. linux – 管道符“|”
  5. 创建软连接
  6. Linux chmod命令

Linux C

  • atoisprintf可以反着用,sprintf为格式化输入到指定char数组,snprintf可以防患于未然(给定空间)
  • fseekftell结合可以计算文件长度
  • rewind等价于:
(void)fseek(stream,0L,SEEK_SET)
  • fseek产生文件空洞,可用于占用磁盘
  • fflush缓冲区

缓冲区的作用:大多数情况下是好事,可用来合并系统调用。
分为
行缓冲:换行时候刷,满了的时候刷,强制刷新(标准输出是这样)
全缓冲:满了的时候刷,只要不是终端设备(标准输出为终端设备)
无缓冲:stderr,需要立即输出的内容

  • fseeko
    在这里插入图片描述
    可移植性不好
    在这里插入图片描述
  • 没有单位的数值没有意义。如果想要长整型,记得在数字后加L,然后再参与运算。
  • 文件类型:dcb-lsp
    在这里插入图片描述
  • 考虑用int接收char
  • umask
    在这里插入图片描述
  • Linux中目录的粘贴位(t位)

——《Unix环境高级编程》
如果对一个目录设置了粘着位,只有对该目录具有写权限的用户并且满足下列条件之一,才能删除或重命名该目录下的文件:
•拥有此文件;
•拥有此目录;
•是超级用户。
目录/tmp 和/var/tmp 是设置粘着位的典型候选者—任何用户都可在这两个目录中创建文件。任一用户(用户、组和其他)对这两个目录的权限通常都是读、写和执行。但是用户不应能删除或重命名属于其他人的文件,为此在这两个目录的文件模式中都设置了粘着位。