我知道在编译可执行文件以供在Linux中使用之前,有很多方法可以删除/添加库依赖项。但是,经过一些搜索后,我只能在只给出可执行文件而没有二进制文件的情况下找不到绕过这些依赖项的方法。例如,如果我在可执行文件上运行ldd并且找不到共享库,我认为该程序不需要运行。
谢谢
答案 0 :(得分:1)
例如,如果我在可执行文件上运行ldd并且找不到共享库,我认为该程序不需要运行。
您可以平凡地测试您的信念是否正确:创建一个空的“存根”共享库,其名称ldd
报告为未找到,并测试可执行文件是否正确运行时你使用那个存根(例如通过LD_LIBRARY_PATH
)。
如果可执行文件实际上工作(这有点不太可能),您可以对可执行文件的.dynamic
部分进行二进制修补以删除不必要的依赖项 - .dynamic
只是一个固定大小的Elf{32,64}_Dyn
记录表,由.d_tag == DT_NULL
的记录终止(所需的库由.d_tag == DT_NEEDED
的记录表示。因此,您可以找到不必要的记录,只需“滑动”所有后续记录表中有一个插槽。
答案 1 :(得分:0)
您可以尝试patchElf,它被声称是“修改ELF可执行文件的动态链接器和RPATH的小实用程序”
主页:http://nixos.org/patchelf.html。 github存储库:https://github.com/NixOS/patchelf