3

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

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

我可以使用 dlopen() 来获得上述要求吗?或者使用 LD_PRELOAD 和 dlopen() 加载库有区别?

4

1 回答 1

3

我对此不是 100% 确定,但据我了解,它使用LD_PRELOAD使程序加载器首先加载所有库,然后是应用程序指定的库LD_PRELOAD,最后是应用程序。这使得用您自己的系统库覆盖系统库成为可能。

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

如果必须设置环境变量以使程序正常工作,则必须在加载程序之前设置它,无论是在 shell 中还是通过您的LD_PRELOAD文件。如果程序不需要立即使用环境变量,那么您可以在程序中设置它,也可以在由dlopen.

于 2013-02-20T12:37:37.613 回答