Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is LD_PRELOAD usage discouraged?

I came across this piece of advice on the Google's tcmalloc documentation page.

You can use TCMalloc in applications you didn't compile yourself, by using LD_PRELOAD:

$ LD_PRELOAD="/usr/lib/libtcmalloc.so" 

LD_PRELOAD is tricky, and we don't necessarily recommend this mode of usage.

Why do they discourage LD_PRELOAD? Is something inherently wrong with it? Is normal linking more robust? How?

like image 827
Sam Avatar asked Oct 16 '25 00:10

Sam


2 Answers

When using LD_PRELOAD, the tcmalloc implementation will be used for any child process as well which may not be what you want.

like image 83
ysdx Avatar answered Oct 18 '25 15:10

ysdx


In addition to ysdx' answer, the value of LD_PRELOAD will also be ignored (for good reasons) for setuid()ed programs.

Depending on the use-case, this might be undesirable. For example, you cannot write a shell script wrapper that exports LD_PRELOAD and then executes the actual program.

like image 20
5gon12eder Avatar answered Oct 18 '25 13:10

5gon12eder