gpt4 book ai didi

java - Linux 开发 : How to know what are the dependencies of my own program?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:55 25 4
gpt4 key购买 nike

我基本上还是一个初级程序员。但是我想做Linux开发。然而,我所有的大学类(class)(Java 类(class)除外)都是面向 Windows 的。所以我们从来不需要做任何包装。但我想为 Linux(Deb 和 RPM)打包我的程序。

我想知道,是否有任何工具可以扫描我的源代码并建议依赖关系?

“hello world”C 程序的依赖项是什么?“hello world”Java 程序的依赖项是什么?有没有识别自己依赖的教程?

最佳答案

对于已编译的二进制文件,请查看 ldd。它显示用于加载可执行文件的动态库的文件名。您需要使用包管理器的某种 who-owns 命令来找出这些库属于哪些包。

> ldd hello
linux-vdso.so.1 (0x00007fff7b5fb000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fa6b1d96000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa6b2137000)

> pacman -Qo /usr/lib/libc.so.6 /lib64/ld-linux-x86-64.so.2
/usr/lib/libc.so.6 is owned by glibc 2.23-2
/usr/lib/ld-linux-x86-64.so.2 is owned by glibc 2.23-2

在这种情况下,唯一的依赖项是 glibc 包。

请注意,这样您只会找到一种特定类型的依赖项。没有任何库,您的二进制文件将无法启动,但可能有其他依赖项不是动态库。特别是,如果可执行文件尝试对来自其他包的文件执行 open()、dlopen()、exec() 或调用 system(),您将不会在 ldd 输出中看到它。

即使对于库,ldd 也不关心间接依赖关系,它只是列出加载的所有内容。使用类似 readelf -d hello | 的东西grep NEEDED 可能会澄清一些事情。

一些包管理器 (RPM) 在制作包时会进行此类检查,并添加找到的所有依赖项。其他人没有。

关于java - Linux 开发 : How to know what are the dependencies of my own program?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com