在linux中,是否有一种方法可以从其函数之一(或从与其链接的任何静态库函数)中获取共享库名称。
基本上,想检查当前是否有类似于program_invocation_short_name/program_invocation_name
的API /变量可用于进程。
答案 0 :(得分:2)
如果您想知道是否存在一个名为"foo"
的动态符号,请使用dlsym(RTLD_DEFAULT, "foo")
来查找该符号的地址,如果没有这样的动态符号,请使用NULL
。
不过,我不知道您为什么要关心共享库的名称。
有了符号的地址时,您始终可以读取/proc/self/maps
伪文件以找出符号源自哪个二进制文件。 (如果符号在r--
映射中,则它是一个不变的内容,例如字符串常量。如果在r-x
映射中,则它在代码中,可能是函数。如果在rw-
映射中,它是一个全局变量。)请注意,由于它是一个伪文件,因此它是内核二进制接口的一部分,并且从未本地化。