C 使用LD_预加载的帮助
我想用修改后的printf版本创建一个库,然后调用LD_PRELOAD,这样当我的程序调用printf时,它会使用我的版本。有人能给我解释一下如何使用LD_PRELOAD,以及我的代码或库中是否需要做一些特殊的事情吗 这似乎是个坏主意。为什么不把你的版本命名为printf呢?这似乎是个坏主意。为什么不将您的版本命名为printf其他名称?您只需将环境变量C 使用LD_预加载的帮助,c,linux,C,Linux,我想用修改后的printf版本创建一个库,然后调用LD_PRELOAD,这样当我的程序调用printf时,它会使用我的版本。有人能给我解释一下如何使用LD_PRELOAD,以及我的代码或库中是否需要做一些特殊的事情吗 这似乎是个坏主意。为什么不把你的版本命名为printf呢?这似乎是个坏主意。为什么不将您的版本命名为printf其他名称?您只需将环境变量LD_PRELOAD设置为替换库的完整路径。由于在此之后启动的所有程序都将尝试使用此库,因此您可能需要创建一个包装器脚本,该脚本设置LD\u P
LD_PRELOAD
设置为替换库的完整路径。由于在此之后启动的所有程序都将尝试使用此库,因此您可能需要创建一个包装器脚本,该脚本设置LD\u PRELOAD
,然后调用要运行的程序。您只需将环境变量LD\u PRELOAD
设置为替换库的完整路径。由于在此点之后启动的所有程序都将尝试使用此库,因此您可能需要创建一个包装器脚本,设置LD_PRELOAD
,然后调用要运行的程序
LD_预加载
和阴影处理都应该格外小心。我记得当GLib内部发生变化时,我在gpgme代码(或其他与gpg相关的代码)中的shadowingg_malloc
中发现了bug李>
答案很简单——不要这样做。更复杂的是——当且仅当您必须这样做时才这样做——通常您不会这样做(除非您编写了某种调试软件)
LD_预加载
和阴影处理都应该格外小心。我记得当GLib内部发生变化时,我在gpgme代码(或其他与gpg相关的代码)中的shadowingg_malloc
中发现了bug李>
答案很简单——不要这样做。更复杂的是——当且仅当您必须这样做时才这样做——通常您不这样做(除非您编写某种调试软件)。或我最喜欢的方式(使用sh或bash):LD_PRELOAD=/path/to/lib./myProg或我最喜欢的方式(使用sh或bash):LD_PRELOAD=/path/to/lib./myProg