55得票5回答
Linux实用程序中有哪些用于修改C++符号名称的工具?

我有一个 c++filt 命令来反编译符号,那么有没有工具可以对符号名称进行重编码呢? 如果我想在 C++ 函数名称上调用 dlsym(),这将非常有用。但我不想在代码中硬编码名称重编码,因为它可能会随着新的编译器版本或新的编译器品牌的使用而更改,或者由于编译多个平台而更改。 是否有一种程...

27得票7回答
如何正确将dlsym返回的指针分配给函数指针类型的变量?

我正在尝试在我的代码中使用dlopen()和dlsym(),并使用gcc编译它。 这是第一个文件。/* main.c */ #include <dlfcn.h> int main() { void *handle = dlopen("./foo.so", RTLD_N...

19得票5回答
C++中替代dlsym()和dlopen()的方法

我有一个应用程序,其中一部分使用共享库。这些库在编译时链接。 在运行时,加载器期望共享对象在 LD_LIBRARY_PATH 中,如果没有找到,则整个应用程序会崩溃并显示错误"无法加载共享库"。请注意,不能保证客户端具有该库,在这种情况下,我希望应用程序留下适当的错误消息,并且独立部分应正确...

18得票2回答
设置LD_PRELOAD以加载我的库会导致一些进程产生加载器错误。

当我尝试运行一个我只有执行权限的脚本时,出现了以下错误: uname: symbol lookup error: /home/dumindara/random/sotest/a.out: undefined symbol: dlsym 这是在我设置了LD_PRELOAD环境变量为/home...

14得票2回答
使用dlsym()时需要进行类型转换

我正在使用C中的dlsym(),我想问一下dlsym()的返回值是否应该显式转换,还是它会被正确地隐式转换。以下是函数:double (*(compile)(void))(double x, double y) { if (system("scan-build clang -fPIC ...

13得票1回答
C语言中关于指针类型的POSIX限制

背景 POSIX标准为C语言添加了许多库函数和其他标识符。在dlsym()函数的描述中,它说(我强调): SYNOPSIS #include <dlfcn.h> void *dlsym(void *restrict handle, const char *restrict ...

13得票4回答
dynamic_cast在使用dlopen/dlsym时失败

简介 首先我要为这个问题的长度道歉,尽管我已经尽可能地简化了它,但它仍然很长。 设置 我定义了两个接口,A和B:class A // An interface { public: virtual ~A() {} virtual void whatever_A()=0; }; ...

12得票3回答
std::shared_ptr和dlopen(),避免未定义行为

dlopen()是一个C函数,用于在运行时动态加载共享库。如果您不熟悉这种模式,那么它的步骤如下: 调用dlopen("libpath", flag)以获取到库的void *handle 调用dlsym(handle, "object_name")以获取到库中所需的东西的void *obj...

9得票2回答
dlsym返回NULL,即使该符号存在

我会使用dlsym在我的程序中查找符号,但它总是返回NULL,这不是我期望的。根据手册,如果存在错误或者符号确实为NULL,dlsym可能会返回NULL。在我的情况下,我遇到了错误。我将向您展示今晚制作的MCVE。 instr.c的内容如下: #include <stdio.h&gt...

9得票5回答
如何在运行时检测符号是否被剥离?

在我的C++程序中,我如何在运行时通过编程方式检测符号是否已经通过Linux上的“strip” GNU开发工具进行剥离? 我想要一个函数定义,如果被剥离则返回true,否则返回false。 使用dlsym()在“main()”上能否可靠地检测到这一点?