gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:46:30 26 4
gpt4 key购买 nike

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

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

我可以使用 dlopen() 来满足上述要求吗?还是使用 LD_PRELOAD 和 dlopen() 加载库时存在差异?

最佳答案

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

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

如果必须设置环境变量才能使程序正常工作,则必须在加载程序之前设置环境变量,可以在 shell 中设置,也可以通过 LD_PRELOAD 文件设置。如果程序不需要立即环境变量,那么您可以在程序中设置它,也可以在 dlopen 加载的共享对象中的“on-load”函数中设置它。

关于c++ - 如何用 dlopen() 替换 LD_PRELOAD 的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com