Linux共享库概述(11)


ldd / bin / ls一般来说 , 您将看到依赖的声名的列表 , 以及这些名称解析的目录 。 在几乎所有情况下 , 您至少有两个依赖关系:

  • /lib/ld-linux.so.N(其中N为1或更多 , 通常至少为2) 。 这是加载所有其他库的库 。
  • libc.so.N(N为6以上) 。 这是C库 。 即使是其他语言也倾向于使用C库(至少要实现自己的库) , 所以大多数程序至少包括这个库 。
请注意:千万 不能 对你不信任的程序运行LDD 。 如ldd(1)手册中明确指出的 , ldd通过设置特殊环境变量(对于ELF对象 , LD_TRACE_LOADED_OBJECTS) , 然后执行程序(在某些情况下)工作 。 不可信程序可能强制ldd用户运行任意代码(而不是简单地显示ldd信息) 。 所以 , 为了安全起见 , 不要在不信任的程序上使用ldd来执行 。
后话应用开发的话 , 我们经常会使用ndk , 使用ndk-build脚本来生成共享库 , 有时会发生一些莫名其妙的问题 。 因为共享库的相关内容与gcc有莫大关系 , gcc的编译参数可谓繁杂 , 我在学习共享库相关内容时 , 有这么一个思考 , 有时候一些莫名其妙的问题是否与一些默认的编译参数与我们所需要的是否是不一样导致的?这只是一点不成熟的思考 , 希望有兴趣的各位能一起讨论!


推荐阅读