如何制作可动态加载共享对象 的可执行文件并将其未定义的符号解析为可执行文件本身?在Linux上。
例如,共享对象具有
extern int a;
void f() { a=1; }
,可执行文件有
int a;
我想从可执行文件中调用f()
并更改a
的值。
感谢。
答案 0 :(得分:1)
来自dlopen
手册页:
使用该库的依赖关系列表中的库以及之前使用RTLD_GLOBAL标志打开的任何其他库来解析库中的外部引用。如果可执行文件与标志" -rdynamic" (或者,同义地," - export-dynamic"),然后可执行文件中的全局符号也将用于解析动态加载库中的引用。
因此,使用-rdynamic
重新编译主应用程序应该有帮助。