OpenSSH6 双库链接问题排查与解决总结
背景
在移植 OpenSSH6 到设备端时,需要使用自研的 SROS 协议栈库,而 OpenSSH 又依赖 OpenSSL 1.0.1u。问题的复杂点在于:
-
系统中存在多个库目录:
-
/usr/lib/openssl101
(自研/定制的 ssl/crypto) -
/usr/lib
(系统常规库)
-
-
链接时需要同时满足 运行时 RPATH 和 编译时 LIBDIR 的要求。
-
makefile 配置中,
LDFLAGS
、LIBS
、RPATH
的写法不当,容易造成找不到库或运行时崩溃。
问题分析
编译阶段
-
编译器/链接器 在生成可执行文件时使用:
-
-L<dir>
:指定编译期库搜索路径 -
-lxxx
:指定链接的库
-
-
如果
-L
路径设置不对,会报 未定义引用(undefined refere