我正在使用共享库使用的c ++。
目前我正在使用“LD_PRELOAD”并使用setenv()设置此环境变量
打电话。
但我想使用dlopen()API来加载共享库。这应该与使用setenv()设置环境变量(即LD_PRELOAD)相同。
我可以使用dlopen()来达到上述要求吗?或者使用LD_PRELOAD和dlopen()?
在库加载方面存在差异答案 0 :(得分:2)
我对此并不是百分之百确定,但据我所知,使用LD_PRELOAD
会使程序加载器首先加载所有库,然后加载LD_PRELOAD
指定的库并使用你的应用程序。这样就可以用自己的方式覆盖系统库。
在加载程序后使用dlopen
加载共享对象,因此不能用于覆盖系统对象。
如果必须设置环境变量才能使程序正常工作,则必须在程序加载之前设置它,无论是在shell中还是在LD_PRELOAD
文件中。如果程序不立即需要环境变量,那么您可以在程序中或在dlopen
加载的共享对象中的“加载”功能中设置它。