堆栈卫士可能已禁用?

时间:2014-03-12 08:31:48

标签: java ubuntu nullpointerexception gpu rootbeer

我正在尝试运行rootbeer库中的第一个示例,您可以从here找到它。

问题是,即使我按照他们的所有说明操作,当我试图运行Jar时,我收到以下消息

root@ubuserver3:/home/ubuadmin/JavaJars/HelloWordGPU# java -jar HelloWorldGPU.jar
OpenJDK Client VM warning: You have loaded library /usr/lib/libcuda.so.319.37 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in thread "main" java.lang.NullPointerException
        at org.trifort.rootbeer.runtime.Rootbeer.run(Rootbeer.java:104)
        at ScalarMult.test(ScalarMult.java:13)
        at Main.main(Main.java:17)

我不是Linux用户,因此我不明白如何正确执行此命令。我也不明白这条消息的意思,因为这是我第一次使用GPU编程。但我知道用错误​​的命令搞乱GPU是一个问题。

5 个答案:

答案 0 :(得分:10)

键入:execstack --version以检查是否已安装execstack。

如果找不到命令,请输入:sudo apt-get install execstack -y --force-yes

输入sudo execstack -c <file> 例如sudo execstack -c /usr/lib/libcuda.so

答案 1 :(得分:4)

1:使用以下命令检查execstack版本以查找是否已安装execstack

execstack --version

2:如果未安装execstack,请使用以下命令安装

sudo apt-get install execstack -y --force-yes

3:安装成功后执行以下命令

sudo execstack -c <filepath>

例如: sudo execstack -c /usr/lib/libjpcap.so

答案 2 :(得分:1)

确保您没有在64位jvm上运行32位jar

答案 3 :(得分:0)

确保您没有运行32位Java。如果运行java -d64,则32位版本将显示错误。

答案 4 :(得分:0)

文件/usr/lib/libcuda.so.319.37包含什么?

如果文件是 0字节文件,则确实存在问题,因此请尝试通过重新安装该库来修复系统。

我在smartgit中遇到了同样的问题,其中使用了本地config文件夹中的库,该库以某种方式损坏了,并且是一个0字节的文件。因此,删除config文件夹并重新启动应用程序对我有用。这也可能是解决方案。