在Linux下,我有一个Java进程,它的一个插件依赖于libgtk-*.so
共享库。目前我们使用$LD_LIBRARY_PATH
或$LD_PRELOAD
来设置共享库的路径。但是如果Java进程打开子进程,那么它们也会设置这些envs,这会导致不想要的结果。
在任何其他编程语言(如Python)中,只要Java进程开始运行,我就会取消这两个env的设置。但是看起来Java不允许你在运行时修改envs。
是否有可能提供共享库作为Java参数之一?有没有其他方法来设置这个共享库仅为Java进程,而不是任何子进程?
您可以直接调用动态链接器,并要求它为您的可执行文件预加载某些库:
/lib64/ld-linux-x86-64.so.2 --preload /lib/x86_64-linux-gnu/libc.so.6 /bin/ls