簡體   English   中英

如何找到二進制文件的哪個部分需要某個版本的某個依賴項?

[英]How to find which part of a binary requires a certain version of a certain dependency?

我正在將一些繼承的代碼編譯到 linux 平台上。 當我嘗試運行它時,我收到一個庫版本控制錯誤:

[aardvark@aardvark-burrow /data/users/aardvark/project-source]  /data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay
/data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay)

首先,誰在乎我有 GLIBC_2.28,而不是 2.29,他們為什么在乎? 它是傳遞給構建最終可執行文件 (fcv_replay) 的編譯標志,還是它的眾多依賴項之一? 我怎么知道? 我基本上想知道在我沒有創建的大型復雜構建系統中尋找什么。

這是另一個查詢的結果:

[aardvark@ /data/users/aardvark/project-source] ldd /data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay
/data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /data/users/aardvark/project-source/buck-out/gen/arvr/projects/viper/applications/replay/fcv_replay)
        linux-vdso.so.1 (0x00007ffe84592000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe4daefd000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fe4dab7b000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fe4da977000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fe4da5b2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe4db11d000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe4da39a000)

您的應用程序fcv_replay已在較新的 Linux 發行版上編譯,並且正在使用libm庫中的一些新功能,這些新功能在您當前的發行版中缺失。

您可以通過檢查反匯編來查看可執行文件的哪個部分導致問題:

$ objdump -dr /bin/nautilus | grep -C5 GLIBC_2.29 | head
000000000004a430 <pow@plt>:
   4a430:   f3 0f 1e fa             endbr64 
   4a434:   f2 ff 25 45 1e 16 00    bnd jmpq *0x161e45(%rip)        # 1ac280 <pow@GLIBC_2.29>
   4a43b:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
...

最好的解決方案是在最舊的發行版上重建fcv_replay以避免依賴於新版本的 libc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM