gpt4 book ai didi

java - 为什么在 "make"下运行会改变共享库加载地址?

转载 作者:太空狗 更新时间:2023-10-29 12:38:05 25 4
gpt4 key购买 nike

同事在运行命令的时候发现

java -Xmx1024m -version

他从 makefile 中得到消息 '无法实例化堆;请求 1G'

但是从命令行运行它工作正常。这是在 SUSE Linux Enterprise Server 11 上使用 32 位 JVM(64 位工作正常)。

经过进一步调查,他发现:

The java shared libraries normally get loaded at the end of the process address space, so addresses around 0x7... If java is being run by a make process, the libraries get loaded in the middle of the address space, at addresses around 0x4....

有谁知道为什么 make 会导致库在不同的位置加载,是否有办法阻止它?

最佳答案

加载地址只是首选加载地址。如果它已经被另一个 so/dll 映射和使用,那么 so/dll 将被重新定位。无论如何,对于 ASLR,情况更糟,您永远不知道这些东西在用户空间中的何处可见。

编辑:

我可以用 2GB (-Xmx2048m) 重现这个问题,但不知道技术上到底是什么问题。我认为这与流程与制作相关的方式/它的产生方式有关

jaap@ubuntu-desktop:~$ make
java -Xmx2048m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
make: *** [all] Error 1

关于java - 为什么在 "make"下运行会改变共享库加载地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4922499/

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