我知道使用dlopen和RLTD_NOLOAD可以找出是否已经加载了共享对象。但是,如果在应用程序启动期间链接到可执行文件并由链接器加载,则这似乎不起作用。
我的意思是,让我说我有mylib.so并用dlopen加载它。之后,如果我使用RLTD_NOLOAD进行dlopen,我会按预期获得句柄。
但是,如果我将mylib.so链接到应用程序(makefile中的-lmylib),则dlopen将返回NULL。
如果共享对象直接链接到exec,我如何获得共享对象的句柄。并没有明确加载?
先谢谢
答案 0 :(得分:1)
这太晚了,但是 -
dlopen(NULL, RTLD_LAZY/*Any load option u want*/)
将获得二进制文件的句柄。它应该能够在它加载的二进制或共享库中找到任何符号。我认为这是一个很好的起点。