编译Ngnix遇到的问题,查看程序依赖的库文件

要点:ldd 可以读取每个可以运行的程序依赖的 so 文件。

编译的时候提示需要Openssl库.

查看本机,已经安装了openssl

查看编译报错文件,查找Openssl所依赖的库

more objs/autoconf.err

查看openssl所依赖的库文件

ldd /usr/bin/openssl

ldd –u /usr/bin/openssl

objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出

objdump -t obj 输出目标文件的符号表

objdump -h obj 输出目标文件的所有段概括

[[email protected] nginx-1.6.0]# objdump -x /usr/bin/openssl

/usr/bin/openssl:     file format elf64-x86-64
/usr/bin/openssl
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000416e20

Program Header:
    PHDR off    0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3
         filesz 0x0000000000000230 memsz 0x0000000000000230 flags r-x
  INTERP off    0x0000000000000270 vaddr 0x0000000000400270 paddr 0x0000000000400270 align 2**0
         filesz 0x000000000000001c memsz 0x000000000000001c flags r--
    LOAD off    0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**21
         filesz 0x0000000000079114 memsz 0x0000000000079114 flags r-x
    LOAD off    0x0000000000079618 vaddr 0x0000000000679618 paddr 0x0000000000679618 align 2**21
         filesz 0x0000000000005690 memsz 0x0000000000006640 flags rw-
    LOAD off    0x000000000007eca8 vaddr 0x000000000087eca8 paddr 0x000000000087eca8 align 2**21
         filesz 0x0000000000004de5 memsz 0x0000000000004de5 flags rw-
DYNAMIC off    0x0000000000079bc8 vaddr 0x0000000000679bc8 paddr 0x0000000000679bc8 align 2**3
         filesz 0x0000000000000210 memsz 0x0000000000000210 flags rw-
    NOTE off    0x000000000000028c vaddr 0x000000000040028c paddr 0x000000000040028c align 2**2
         filesz 0x0000000000000044 memsz 0x0000000000000044 flags r--
EH_FRAME off    0x0000000000075be8 vaddr 0x0000000000475be8 paddr 0x0000000000475be8 align 2**2
         filesz 0x00000000000006f4 memsz 0x00000000000006f4 flags r--
   STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
   RELRO off    0x0000000000079618 vaddr 0x0000000000679618 paddr 0x0000000000679618 align 2**0
         filesz 0x00000000000009e8 memsz 0x00000000000009e8 flags r--

Dynamic Section:
  NEEDED               libssl.so.10
  NEEDED               libgssapi_krb5.so.2
  NEEDED               libkrb5.so.3
  NEEDED               libcom_err.so.2
  NEEDED               libk5crypto.so.3
  NEEDED               libcrypto.so.10
  NEEDED               libdl.so.2
  NEEDED               libz.so.1
  NEEDED               libc.so.6
  INIT                 0x0000000000412c00
  FINI                 0x00000000004625d8
  GNU_HASH             0x00000000004002d0
  STRTAB               0x000000000087eca8
  SYMTAB               0x00000000004003c0
  STRSZ                0x0000000000004d75
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000679fe8
  PLTRELSZ             0x00000000000062e8
  PLTREL               0x0000000000000007
  JMPREL               0x000000000040c918
  RELA                 0x000000000040c2e8
  RELASZ               0x0000000000000630
  RELAENT              0x0000000000000018
  VERNEED              0x000000000040c228
  VERNEEDNUM           0x0000000000000003
  VERSYM               0x000000000040b96e
  0x6ffffef9           0x0000000000406c30
  0x6ffffdf7           0x000000000000012c
  0x6ffffef8           0x0000000000406d60
  0x6ffffdf6           0x0000000000000db0

http://wapiknow.baidu.com/question/523406943.html

linux依赖关系及软件编译更新

linux各种软件相互依赖,如一张网一般,如果需要更新其中一个软件,rpm的好像可以解决软件间的相互依赖关系;如果自己编译更新软件(很多软件没有rpm格式的),用tar更新,如何解决相互依赖关系? 卸载旧版软件,如何将软件间依赖关系更新到新装软件? 我发现我编译更新软件之后,其他软件仍然依赖旧版软件,如果卸载旧软件就会影响其他软件的依赖关系,系统软件网就会有一个大破洞,很多软件都不能再用,严重的只能重装系统。

fuyaosuixin 2013-2-7

下载知道客户端,10分钟内有问必答

最佳推荐答案

脑补……
因为你没有软件,所有这些事情都要自己动手。

ldd 可以读取每个可以运行的程序依赖的 so 文件。

objdump 好像也可以读取依赖的一些内容。

之后用读取的这些内容反推程序对应的软件包,之后把这些反推出来的软件包都重新编译。

一般来说 ldd 对应的 so 文件只要正确,一般函数接口就问题不大,当然并不绝对。

所以,这种情况,最好的解决办法是把所有系统都整体的重新编译一遍。

言外之意,用 tar 源代码升级系统基本函数库是一个典型的找抽行为。

旧软件可以和自己编译的新软件共存啊,只要编译时候指定一个不同的安装目录就行了,可以完全不影响旧软件的。

编译Ngnix遇到的问题,查看程序依赖的库文件

时间: 2024-10-27 12:12:58

编译Ngnix遇到的问题,查看程序依赖的库文件的相关文章

Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到Linux下有没有这么一个命令,能够找到一个可执行文件运行时所依赖的库文件,百度一下,还真的有ldd命令. ldd的作用是打印可执行文件依赖的共享库文件,它是glibc的一部分: [email protected]:~# ldd --helpUsage: ldd [OPTION]... FILE..

linux查看应用程序依赖的库

x86: ldd    + 应用名 arm: arm-linux-readelf    -d   应用名 linux查看应用程序依赖的库

程序中的库文件

在java中,我们之间使用源码作为库文件,在编译时,就像自己写的代码一样被编译.但是c,c++语言的库都是被编译成了二进制文件,调用者不使用源码,相对来说更复杂一些,比如window下有dll库,linux下有.a,.so库,macos有dylib库.下载opencv库,要进行本地编译,然后在链接过程中,使用了库文件. 参考博文:dll库的编写和使用:https://www.cnblogs.com/chechen/p/8676226.html dll库和.so库对比:https://www.cn

整理Linux下gcc编译中关于头文件与库文件搜索路径相关问题

分类: MakeFile/Make/GCC/LD2010-11-20 23:15 535人阅读 评论(0) 收藏 举报 转者的话: 本文详细介绍了gcc 编译时 搜索头文件的路径以及方式, 编译时寻找lib库的方式, 以及运行时加载库的寻找方式!!!非常之经典啊!以后有新的知识都汇总到这里来了! 在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法. 看下文的红色部分. 有大量的环境变量可供设置以影响 G

linux-gcc 编译时头文件和库文件搜索路径

一.头文件  gcc 在编译时寻找所需要的头文件 :  ※搜寻会从-I开始  ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH  ※再找内定目录/usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/g++-3/usr/lib/gcc-lib/

27>>gcc编译时头文件和库文件搜索路径

一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始(gcc 参数,指定头文件搜索位置) ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录 /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i

利用Visual Studio寻找C#程序必要的运行库文件

在工程打包中,有时候很头痛的就是运行所需要的库文件不能够全面的包含进来,特别是有时候调用了一系列外部扩展.对于这些问题,我们可以借用Visual Studio的打包功能帮助我们寻找软件运行必须的库文件. 首先,我们通过“文件---新建---项目---其他项目类型---安装与部署---Visual Studio Installer”新建一个“安装向导”工程. 默认下一步即可,然后我们选择,在右侧空白区域,添加程序运行所需的环境文件,这里需要特别添加程序工程文件中的引用,包括DLL引用,如下图所示

向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)

在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面:    ·Quartus不支持Testbench:    ·调用了megafunction或者lpm库之类的Altera的函数:    ·时序仿真要在Modelsim下做仿真.    下面以Altera器件为例,介绍如何在ModelSim中加入Altera的仿真库,Quartus II软件中自带有Altera的仿真库,只要把它拿到ModelSim中去编译一下就可以了,具体步骤如下:1.设置仿真库路径    打开M

如何查看程序被哪个版本编译器编译的linux-gcc

如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949 那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示.最大程度上查看一个elf文件信息. 如下: [[email protected] rootfs]#  readelf -Wa bin/gzip ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00