编译Ngnix遇到的问题,查看程序依赖的库文件
要點(diǎn):ldd 可以讀取每個(gè)可以運(yùn)行的程序依賴的 so 文件。
編譯的時(shí)候提示需要Openssl庫(kù).
查看本機(jī),已經(jīng)安裝了openssl
?
查看編譯報(bào)錯(cuò)文件,查找Openssl所依賴的庫(kù)
more objs/autoconf.err
查看openssl所依賴的庫(kù)文件
ldd /usr/bin/openssl
ldd –u /usr/bin/openssl
objdump -x obj 以某種分類信息的形式把目標(biāo)文件的數(shù)據(jù)組織(被分為幾大塊)輸出???
objdump -t obj 輸出目標(biāo)文件的符號(hào)表
objdump -h obj 輸出目標(biāo)文件的所有段概括
?
[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依賴關(guān)系及軟件編譯更新
linux各種軟件相互依賴,如一張網(wǎng)一般,如果需要更新其中一個(gè)軟件,rpm的好像可以解決軟件間的相互依賴關(guān)系;如果自己編譯更新軟件(很多軟件沒(méi)有rpm格式的),用tar更新,如何解決相互依賴關(guān)系? 卸載舊版軟件,如何將軟件間依賴關(guān)系更新到新裝軟件? 我發(fā)現(xiàn)我編譯更新軟件之后,其他軟件仍然依賴舊版軟件,如果卸載舊軟件就會(huì)影響其他軟件的依賴關(guān)系,系統(tǒng)軟件網(wǎng)就會(huì)有一個(gè)大破洞,很多軟件都不能再用,嚴(yán)重的只能重裝系統(tǒng)。
fuyaosuixin 2013-2-7
下載知道客戶端,10分鐘內(nèi)有問(wèn)必答
最佳推薦答案
腦補(bǔ)……
因?yàn)槟銢](méi)有軟件,所有這些事情都要自己動(dòng)手。
ldd 可以讀取每個(gè)可以運(yùn)行的程序依賴的 so 文件。
objdump 好像也可以讀取依賴的一些內(nèi)容。
之后用讀取的這些內(nèi)容反推程序?qū)?yīng)的軟件包,之后把這些反推出來(lái)的軟件包都重新編譯。
一般來(lái)說(shuō) ldd 對(duì)應(yīng)的 so 文件只要正確,一般函數(shù)接口就問(wèn)題不大,當(dāng)然并不絕對(duì)。
所以,這種情況,最好的解決辦法是把所有系統(tǒng)都整體的重新編譯一遍。
言外之意,用 tar 源代碼升級(jí)系統(tǒng)基本函數(shù)庫(kù)是一個(gè)典型的找抽行為。
舊軟件可以和自己編譯的新軟件共存啊,只要編譯時(shí)候指定一個(gè)不同的安裝目錄就行了,可以完全不影響舊軟件的。
總結(jié)
以上是生活随笔為你收集整理的编译Ngnix遇到的问题,查看程序依赖的库文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hibernate实体JSONObjec
- 下一篇: [汇编] 002基础知识-CPU和寄存器