如何用dlopen()replaceLD_PRELOAD的用法?

我正在使用共享库的使用C ++。

目前我正在使用“LD_PRELOAD”,并使用setenv()调用设置此环境variables。
但我想用dlopen()API来加载共享库。 这应该像使用setenv()设置环境variables(即LD_PRELOAD)一样工作。

我可以使用dlopen()获取以上要求吗? 或者在使用LD_PRELOAD和dlopen()加载库时有所不同?

我不是100%确定这一点,但据我所知,它使用LD_PRELOAD使程序加载器加载所有库,首先,然后LD_PRELOAD指定的库,最后你的应用程序。 这使得可以用你自己的方法来覆盖系统库。

使用dlopen加载程序后加载共享对象,所以不能用来覆盖系统对象。

如果必须为程序设置环境变量才能正常工作,那么必须在程序加载之前(在shell或LD_PRELOAD文件中)设置环境变量。 如果程序不需要立即使用环境变量,那么可以将其设置在程序中,也可以在dlopen加载的共享对象的“加载”函数中进行设置。