当前位置: 首页 > news >正文

一周学习经验汇总之OpenSSH6 移植与库链接心得笔记

1. 环境与目标

  • 在嵌入式系统上移植 OpenSSH6

  • 系统存在 自研 OpenSSL 1.0.1 库libsrosssl101.so, libsroscrypto101.so

  • 同时需要依赖 系统通用库libdl, libutil, libcrypt, libresolv, zlib 等)

  • 目标:保证 编译能通过运行时能优先加载自研库,并且与系统库 稳定共存


2. 主要问题与排查过程

2.1 编译阶段问题

  • 表现:出现 undefined referencecannot find -lxxx

  • 原因

    • -L 指定目录不全,导致找不到库

    • 静态库(.a)和动态库(.so)混用,引入交叉依赖,导致链接失败

  • 经验

    • -L 用于编译阶段搜索库路径

    • 避免盲目引入 .a,否则最终包过大且依赖复杂


2.2 运行阶段问题

  • 表现:运行 dlz_sshd 没有输出,或者直接报错 找不到系统库

  • 原因

    • 动态加载器 ld.so 默认优先使用 RPATH

    • 如果只设置 /usr/lib/openssl101,会覆盖系统库路径,导致找不到 libdl.so.2

  • 经验

    • RPATH 需同时包含 自研库目录系统库目录

    • RPATH 优先级高于 LD_LIBRARY_PATH,必须小心配置


2.3 动态库冲突

  • 表现:加载到错误版本的 OpenSSL(比如系统默认 vs 自研库),导致运行时异常

  • 经验

    • 通过 -Wl,-rpath 指定搜索顺序,确保自研库优先

    • ldd ./dlz_sshd 检查最终可执行文件依赖

    • 必要时使用 LD_DEBUG=libs 跟踪库加载过程


3. 关键解决方案

3.1 Makefile 配置要点

# 运行阶段优先搜索的库目录
OPENSSL101_RUNDIR := /usr/lib/openssl101# 编译 & 链接阶段
OPENSSH_LDFLAGS := -L$(ROOTFS)/usr/lib \-Wl,-rpath,$(OPENSSL101_RUNDIR):/usr/libLIBS := -lsrosssl101 -lsroscrypto101 -ldl -lutil -lz -lcrypt -lresolvsshd: $(SSHDOBJS)$(CC) -o $@ $(SSHDOBJS) $(LIBS) $(OPENSSH_LDFLAGS)

3.2 验证方法

  1. ldd 检查依赖

    ldd ./dlz_sshd

    确保自研库和系统库都能正确加载

  2. 调试加载顺序

    LD_DEBUG=libs ./dlz_sshd

    确认优先从 /usr/lib/openssl101 加载 ssl/crypto


4. 总结出的经验点

  1. 编译阶段(-L) vs 运行阶段(RPATH)

    • -L 只影响 编译器链接

    • RPATH 决定 运行时加载顺序

  2. 双库共存原则

    • 自研库放在专用目录(如 /usr/lib/openssl101

    • 系统库保留 /usr/lib,避免覆盖

  3. 调试工具必备

    • ldd → 检查可执行文件的依赖库

    • LD_DEBUG=libs → 跟踪动态库加载顺序

    • readelf -d → 查看 ELF 的 RPATH 和依赖

  4. 避免静态库滥用

    • 静态库 .a 打包会导致臃肿,除非必要,不要混编


5. 收获与提升

  • 掌握了 编译期 vs 运行期 动态库搜索机制

  • 熟悉了 RPATH、LD_LIBRARY_PATH、ld.so 的关系

  • 积累了 调试工具链 使用方法

  • 学会了在复杂依赖环境下让 自研库与系统库共存

http://www.dtcms.com/a/428519.html

相关文章:

  • 游戏币网站建设wordpress虾米
  • 青岛易龙网站建设中国建筑招聘官方网站
  • 个人简历模板可编辑免费常州谷歌优化
  • 全屏网站大小企业网站建设中的常见问题
  • 湛江市微信网站建设企业app制作开发教程
  • Linux虚拟机固定IP超详细教程
  • 房产中介网站江门做网站软件
  • 合肥建站方案加强网站技术建设
  • 汽车零件销售网站开发影视制作公司简介
  • 做网站定金一般多少企业建设网站作用
  • 香港服务器租用价格大概是多少
  • 建网站投放广告赚钱电脑版淘宝网页
  • 网站建设推广多少钱服务周到的微网站建设
  • wordpress网站根目录28网站建设
  • 开关柜局放在线监测装置
  • MyBatis拦截器在服务内存防护场景中的应用
  • 东莞便宜做网站如何做一起好的视频宣传自己的网站
  • 【完整源码+数据集+部署教程】痤疮特征分割系统: yolov8-seg-p2
  • Python快速入门专业版(五十二): Python程序调试:print调试与pdb调试工具(定位代码错误)
  • 三大调度方案深度对比:AI/超算/大数据场景如何选?
  • 网站建设模板能实现按钮跳转吗河北省建设网站的网站首页
  • Linux-02(Linux用户和权限)
  • 网站建设数据库系统东台网站网站建设
  • GEO优化师企业
  • 世界顶尖名表瑞士网站不要中国手表网站站外推广方式
  • 最好的建设网站网件路由器维修
  • 郑州网站模板建设做网站服务器需要自己提供吗
  • 返璞归真-Java基础
  • 关于SDK和agent学习
  • 延津县建设局网站作文网址