編譯Ngnix遇到的問題,查看程序依賴的庫文件

要點:ldd 能夠讀取每一個能夠運行的程序依賴的 so 文件。

編譯的時候提示須要Openssl庫.html

查看本機,已經安裝了openssllinux

image

 

查看編譯報錯文件,查找Openssl所依賴的庫nginx

more objs/autoconf.err api

image

查看openssl所依賴的庫文件函數

ldd /usr/bin/opensslui

image

ldd –u /usr/bin/openssl3d

image

objdump -x obj 以某種分類信息的形式把目標文件的數據組織(被分爲幾大塊)輸出    orm

objdump -t obj 輸出目標文件的符號表 cdn

objdump -h obj 輸出目標文件的全部段歸納 htm

 

[root@rhel 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 源代碼升級系統基本函數庫是一個典型的找抽行爲。

舊軟件能夠和本身編譯的新軟件共存啊,只要編譯時候指定一個不一樣的安裝目錄就好了,能夠徹底不影響舊軟件的。

相關文章
相關標籤/搜索