如何用dlopen()替换LD_PRELOAD的用法?

时间:2013-02-20 12:33:26

标签: c++ linux shared-libraries

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

目前我正在使用“LD_PRELOAD”并使用setenv()设置此环境变量 打电话。
但我想使用dlopen()API来加载共享库。这应该与使用setenv()设置环境变量(即LD_PRELOAD)相同。

我可以使用dlopen()来达到上述要求吗?或者使用LD_PRELOAD和dlopen()?

在库加载方面存在差异

1 个答案:

答案 0 :(得分:2)

我对此并不是百分之百确定,但据我所知,使用LD_PRELOAD会使程序加载器首先加载所有库,然后加载LD_PRELOAD指定的库并使用你的应用程序。这样就可以用自己的方式覆盖系统库。

在加载程序后使用dlopen加载共享对象,因此不能用于覆盖系统对象。

如果必须设置环境变量才能使程序正常工作,则必须在程序加载之前设置它,无论是在shell中还是在LD_PRELOAD文件中。如果程序不立即需要环境变量,那么您可以在程序中或在dlopen加载的共享对象中的“加载”功能中设置它。