gpt4 book ai didi

c++ - 如何判断在哪个.SO库中赋予了C函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:14 24 4
gpt4 key购买 nike

我在Linux编程中一直遇到这个问题。只要 Linux 的所有手册和几乎所有源代码都是以 C 为中心的,所有对某些功能的引用只需要一些 include <something.h>行和函数可从 C/C++ 代码访问。

但我是用汇编语言编程的,对 C/C++ 几乎一无所知。

为了能够调用一些函数,我必须从相应的.so库中导入它。

如何确定库的文件名?它通常与库本身的名称不同,并且未在手册中指定。

例如,XLib 的名称实际上是libX11.so.6 . XShm 扩展库的名字好像是libXext.so.6 .

有没有简单的方法可以使用提供的 C 手册和引用来确定库的 secret 真实名称?

最佳答案

这是另一种并非 100% 准确的方法,可以让您了解如何缩小范围。它并不完全符合问题,因为它使用常见的 linux 实用程序而不是 man 文件,但它可能仍然有用。

使用您的发行版的包管理软件。

例如,在 Arch Linux 上,如果您对 GLFW/glfw3.h 中的函数感兴趣,您可以找出谁拥有该文件:

$ pacman -Qo /usr/include/GLFW/glfw3.h
/usr/include/GLFW/glfw3.h is owned by glfw 3.1-1

找出哪个.so文件在该包中:

$ pacman -Ql glfw | grep 'so$'
glfw /usr/lib/libglfw.so

并且,如果需要,找到链接指向的实际文件:

$ readlink -f /usr/lib/libglfw.so
/usr/lib/libglfw.so.3.1

这将取决于您的发行版。我相信在 Ubuntu/Debian 上你会使用 dpkg-query相反。


编辑: DevSolar 在评论中指出您可以使用 apt-file search <header>apt-file list <package>而不是 dpkg-query -S <header>dpkg-query -L <package> . apt-file似乎即使对于未安装的软件包也能正常工作(尽管它看起来更慢?)。

我还注意到(至少在我的 Ubuntu VM 上),例如,libglfw-dev 包含 libglfw.so符号链接(symbolic link),而 libglfw2 包含实际的 libglfw.so.2对象。


一旦你有了一组 .so文件,您可以检查它们是否有您感兴趣的任何功能:

$ nm -D /usr/lib/libglfw.so | grep "glfwCreateWindow"
0000000000007cd0 T glfwCreateWindow

请注意,我从对 previous question 的评论中提取了最后一步并没有完全理解它。也许您甚至可以跳过前面的步骤并依赖 nmgrep一个人?

关于c++ - 如何判断在哪个.SO库中赋予了C函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345719/

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