【问题标题】:How to get JOGL on Ubuntu 11.10 to work如何在 Ubuntu 11.10 上运行 JOGL
【发布时间】:2011-12-10 06:19:38
【问题描述】:

非常感谢任何帮助。

问题: Ubuntu 11.10 与 Java 的 JOGL 不兼容

已确立内容的总结:

  • JDK 正常
  • 环境变量正常
  • JOGL 罐子和库正常
  • 测试文件使用正常
  • 不太可能是 EBKAC
  • 文件权限正常
  • Ubuntu 11.10 引起的问题,(有帮助吗?)
  • 可能的解决方案 - 如何安装 libjogl-java_1.1.1+dak1.orig.tar.gz ?

已建立的详细信息:

JOGL 在 Ubuntu 11.04 上运行良好。测试文件“T1.java”正确显示了一个线框立方体。 将 Ubuntu 更新到 11.10 后,在 Eclipse 中运行时,JOGL 框架总是冻结,没有显示任何 JOGL 优点。 我尝试运行一个 Java 小程序来检查 Java 是否损坏,它运行良好。 Java没有坏。 在 Eclipse 中检查了我的 jogl 用户库,看起来不错。为所有 jar 正确设置了本机库。 我尝试在终端中运行该文件

    cd ~/workspace/projectname/src/packagename/
    javac T1.java 

并收到 32 个错误,抱怨找不到包。此时我意识到这不是日食问题。

我在 /etc/environment 和 /etc/profile 更改了环境变量,这样运行:

回显 $PATH

回显 $CLASSPATH

回显 $JAVA_HOME

所有显示 ~/librambo/jar 和 ~/librambo/lib 都应该(加上 JDK 正确出现在 PATH 中) (~/librambo 是 /home/rambo/librambo , rambo = 用户名)

我尝试将简单的“T1.java”放入 ~/librambo/jar 并从那里 javac 'ing 它,同样的问题。然后我尝试了:

javac -classpath jogl.all.jar T1.java

确定它是否会减少错误的数量,并声称“读取 jogl.all.jar 时出错;打开 zip 文件时出错”

解压 jar 文件后,它编译但不会运行。跑步

ldd *.so

在终端中,我看到它缺少“libjawt.so”,因为它抱怨“未找到”。 在找到该库文件并将其复制到 ~/librambo/jar 文件夹后,它 (ldd *.so) 然后抱怨其他几个库包,例如 libmawt.so、libjvm.so 等。在他们也加入了可怕的池之后聚集在 ~/librambo/jar 中的文件,再次 ldd 后它抱怨它现在找不到 libjawt.so - 但我只是“修复”了这个问题......

我还用“gksu nautilus”找到了他们的 jar 文件,并将他们的权限设置为所有用户的读/写权限,并允许他们作为可执行文件运行。

我一直在使用 sun-java-6,所以在妄想症中,我决定删除 /usr/lib/jvm 中的其他 java SDK,以防止由于太多 jar 文件而造成混淆。同样的问题。安装 JDK1.7.0,清除 ~/librambo/jar 只留下 4 个 jars(和 T1.java),不会编译 - 再次出现相同的 32 个错误。 (我使用“sudo update-alternatives --config java”来设置java版本,我使用java -version来检查我使用的是什么版本,所以这不是问题=p)

这次下载了新的 jogl-linux-amd64.7z,在其中打开了 java-jogl-src.zip 并再次将内容复制到 /~librambo/jar 看看我是否可以让它在这个文件夹中工作, 100 错误,因为目录结构不匹配。

我已经在网上搜索了很多天来寻找答案,我想我可能终于找到了:

https://launchpad.net/ubuntu/oneiric/+source/libjogl-java/1.1.1+dak1-10

它在更改日志中显示“更新补丁以设置 java.library.path”,这与我遇到的错误(在某些时候)保持一致。不幸的是,当我下载 libjogl-java_1.1.1+dak1.orig.tar.gz 并打开它时,我意识到我不知道我应该对这些内容做什么。谁能告诉我如何“安装”它们?

或者,这里是附录,其中包含文件层次结构、/etc/environment 设置、32 个错误输出以及我已经检查过的参考列表。

//////////////////////////////////////////

附录

//////////////////////////////////////////

文件层次结构

  • /home/rambo/librambo/jar/gluegen-rt.jar
  • /home/rambo/librambo/jar/jogl.all.jar
  • /home/rambo/librambo/jar/jogl-all-natives-linux-amd64.jar
  • /home/rambo/librambo/jar/newt.event.jar
  • /home/rambo/librambo/jar/T1.java #和其他许多文件,已经被删除,因此32错误又回来了。
  • /home/rambo/librambo/lib/libgluegen-rt.so
  • /home/rambo/librambo/lib/libjogl_desktop.so
  • /home/rambo/librambo/lib/libjogl_mobile.so
  • /home/rambo/librambo/lib/libnativewindow_awt.so
  • /home/rambo/librambo/lib/libnativewindow_x11.so
  • /home/rambo/librambo/lib/libnewt.so

环境变量

  • PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/.rvm/bin:/home /rambo/librambo/jar:/home/rambo/librambo/lib:/usr/lib/jvm/jdk1.7.0/bin:/usr/lib/jvm/jdk1.7.0/lib:/usr/lib/jvm/jdk1 .7.0/jre/lib/amd64"
  • JAVA_HOME="/usr/lib/jvm/jdk1.7.0/bin:/usr/lib/jvm/jdk1.7.0/lib:/usr/lib/jvm/jdk1.7.0/jre/lib/amd64:/ home/rambo/librambo/jar:/home/rambo/librambo/lib"
  • CLASSPATH="/usr/lib/jvm/jdk1.7.0/bin:/usr/lib/jvm/jdk1.7.0/lib:/usr/lib/jvm/jdk1.7.0/jre/lib/amd64:/ home/rambo/librambo/jar:/home/rambo/librambo/lib"

32 个错误

    rambo@rambo-ThinkPad-SL510:~/librambo/jar$ javac T1.java 
    T1.java:3: package javax.media.opengl does not exist
    import javax.media.opengl.*;
    ^
    T1.java:4: package javax.media.opengl.awt does not exist
    import javax.media.opengl.awt.GLCanvas;
                                 ^
    T1.java:5: package com.jogamp.opengl.util does not exist
    import com.jogamp.opengl.util.*;
    ^
    T1.java:6: package javax.media.opengl.glu does not exist
    import javax.media.opengl.glu.GLU;
                                 ^
    T1.java:7: package com.jogamp.opengl.util.gl2 does not exist
    import com.jogamp.opengl.util.gl2.GLUT;
                                     ^
    T1.java:9: cannot find symbol
    symbol: class GLEventListener
    public class T1 extends Frame implements GLEventListener, ActionListener {
                                             ^
    T1.java:17: cannot find symbol
    symbol  : class GLCanvas
    location: class T1
      private GLCanvas canvas;
              ^
    T1.java:75: cannot find symbol
    symbol  : class GLAutoDrawable
    location: class T1
      public void display(GLAutoDrawable drawable) {
                          ^
    T1.java:81: cannot find symbol
    symbol  : class GLAutoDrawable
    location: class T1
      public void dispose(GLAutoDrawable drawable) {
                          ^
    T1.java:85: cannot find symbol
    symbol  : class GLAutoDrawable
    location: class T1
      public void init (GLAutoDrawable drawable) {
                        ^
    T1.java:92: cannot find symbol
    symbol  : class GLAutoDrawable
    location: class T1
      public void reshape (GLAutoDrawable drawable, int x, int y, int width, int height) {
                           ^
    T1.java:115: cannot find symbol
    symbol  : class GLU
    location: class Scene
      private GLU glu = new GLU();
              ^
    T1.java:116: cannot find symbol
    symbol  : class GLUT
    location: class Scene
      private GLUT glut = new GLUT();
              ^
    T1.java:133: cannot find symbol
    symbol  : class GL2
    location: class Scene
      public void render(GL2 gl) {
                         ^
    T1.java:145: cannot find symbol
    symbol  : class GL2
    location: class Scene
      private void drawAxes(GL2 gl) {
                            ^
    T1.java:20: cannot find symbol
    symbol  : variable GLProfile
    location: class T1
        GLProfile.initSingleton(true);
        ^
    T1.java:29: cannot find symbol
    symbol  : class GLProfile
    location: class T1
        GLProfile glp = GLProfile.getDefault();
        ^
    T1.java:29: cannot find symbol
    symbol  : variable GLProfile
    location: class T1
        GLProfile glp = GLProfile.getDefault();
                        ^
    T1.java:30: cannot find symbol
    symbol  : class GLCapabilities
    location: class T1
        GLCapabilities caps = new GLCapabilities(glp);
        ^
    T1.java:30: cannot find symbol
    symbol  : class GLCapabilities
    location: class T1
        GLCapabilities caps = new GLCapabilities(glp);
                                  ^
    T1.java:31: cannot find symbol
    symbol  : class GLCanvas
    location: class T1
        canvas = new GLCanvas(caps);
                     ^
    T1.java:56: cannot find symbol
    symbol  : class FPSAnimator
    location: class T1
        FPSAnimator animator = new FPSAnimator(canvas, 60);
        ^
    T1.java:56: cannot find symbol
    symbol  : class FPSAnimator
    location: class T1
        FPSAnimator animator = new FPSAnimator(canvas, 60);
                                   ^
    T1.java:76: cannot find symbol
    symbol  : class GL2
    location: class T1
        GL2 gl = drawable.getGL().getGL2();
        ^
    T1.java:86: cannot find symbol
    symbol  : class GL2
    location: class T1
        GL2 gl = drawable.getGL().getGL2();
        ^
    T1.java:93: cannot find symbol
    symbol  : class GL2
    location: class T1
        GL2 gl = drawable.getGL().getGL2();
        ^
    T1.java:99: cannot find symbol
    symbol  : variable GL2
    location: class T1
        gl.glMatrixMode(GL2.GL_PROJECTION);
                        ^
    T1.java:108: cannot find symbol
    symbol  : variable GL2
    location: class T1
        gl.glMatrixMode(GL2.GL_MODELVIEW);
                        ^
    T1.java:115: cannot find symbol
    symbol  : class GLU
    location: class Scene
      private GLU glu = new GLU();
                            ^
    T1.java:116: cannot find symbol
    symbol  : class GLUT
    location: class Scene
      private GLUT glut = new GLUT();
                              ^
    T1.java:134: cannot find symbol
    symbol  : variable GL2
    location: class Scene
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
                   ^
    T1.java:148: cannot find symbol
    symbol  : variable GL2
    location: class Scene
        gl.glBegin(GL2.GL_LINES);
                   ^
    32 errors
    

参考文献

(截断列表)

//////////////////////////////////////////

更新

//////////////////////////////////////////

第 5 天 java jogl 头痛更新

进展!! =D

现在只有 20 个与... Android 相关的错误? =S

于是我新建了一个文件夹 /home/rambo/libme

我下载了:

  • jogl-linux-amd64.7z 16-Sep-2011 13:50 7.0M
  • gluegen-linux-amd64.7z 16-Sep-2011 04:53 735K

来自:

http://jogamp.org/deployment/jogamp-current/archive/jogamp-linux-amd64/

这一次,我解压了 7zip 文件,并在每个文件中看到了一个 src zip 文件夹。我将两者的内容都复制到了 libme 中,没有被覆盖——尽管它们共享相似的文件夹结构。

然后我将环境变量更改为指向 libme。然后我将 T1.java 移到 libme 中。 libme 中 T1 的 Javac 报错如下:

    rambo@rambo-ThinkPad-SL510:~/libme$ javac T1.java 
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:30: package android.content does not exist
    import android.content.*;
    ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:31: package android.content.pm does not exist
    import android.content.pm.*;
    ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:32: package android.util does not exist
    import android.util.Log;
                       ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:37: cannot find symbol
    symbol  : class PackageInfo
    location: class jogamp.common.os.android.PackageInfoUtil
       public static final PackageInfo getPackageInfo(String packageName) {
                           ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:41: cannot find symbol
    symbol  : class Context
    location: class jogamp.common.os.android.PackageInfoUtil
       public static final PackageInfo getPackageInfo(Context ctx, String packageName) {
                                                      ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:41: cannot find symbol
    symbol  : class PackageInfo
    location: class jogamp.common.os.android.PackageInfoUtil
       public static final PackageInfo getPackageInfo(Context ctx, String packageName) {
                           ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:30: package android.content does not exist
    import android.content.*;
    ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:31: package android.util does not exist
    import android.util.Log;
                       ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:34: cannot find symbol
    symbol  : class Context
    location: class jogamp.common.os.android.StaticContext
       private static Context context = null;
                      ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:37: cannot find symbol
    symbol  : class Context
    location: class jogamp.common.os.android.StaticContext
       public static final synchronized void setContext(Context ctx) {
                                                        ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:41: cannot find symbol
    symbol  : class Context
    location: class jogamp.common.os.android.StaticContext
       public static final synchronized Context getContext() {
                                        ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:44: cannot find symbol
    symbol  : class PackageInfo
    location: class jogamp.common.os.android.PackageInfoUtil
                   final PackageInfo pi = ctx.getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA);
                         ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:44: cannot find symbol
    symbol  : variable PackageManager
    location: class jogamp.common.os.android.PackageInfoUtil
                   final PackageInfo pi = ctx.getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA);
                                                                                              ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:45: cannot find symbol
    symbol  : variable Log
    location: class jogamp.common.os.android.PackageInfoUtil
                   if(DEBUG) Log.d(MD.TAG, "getPackageInfo("+packageName+"): "+pi);
                             ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:47: cannot find symbol
    symbol  : variable Log
    location: class jogamp.common.os.android.PackageInfoUtil
               } catch (Exception e) { if(DEBUG) { Log.d(MD.TAG, "getPackageInfo("+packageName+")", e); } }
                                                   ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:49: cannot find symbol
    symbol  : variable Log
    location: class jogamp.common.os.android.PackageInfoUtil
           if(DEBUG) Log.d(MD.TAG, "getPackageInfo("+packageName+"): NULL");
                     ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:54: cannot find symbol
    symbol  : class PackageInfo
    location: class jogamp.common.os.android.PackageInfoUtil
           final PackageInfo pInfo = getPackageInfo(packageName);
                 ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:58: cannot find symbol
    symbol  : class PackageInfo
    location: class jogamp.common.os.android.PackageInfoUtil
           final PackageInfo pInfo = getPackageInfo(packageName);
                 ^
    /home/rambo/libme/jogamp/common/os/android/PackageInfoUtil.java:60: cannot find symbol
    symbol  : variable Log
    location: class jogamp.common.os.android.PackageInfoUtil
           if(DEBUG) Log.d(MD.TAG, "getPackageInfoVersionName("+packageName+"): "+s);
                     ^
    /home/rambo/libme/jogamp/common/os/android/StaticContext.java:38: cannot find symbol
    symbol  : variable Log
    location: class jogamp.common.os.android.StaticContext
           if(DEBUG) Log.d(MD.TAG, "setContext("+ctx+")");
                     ^
    Note: /home/rambo/libme/javax/media/opengl/awt/GLCanvas.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    20 errors

删除 android 文件夹没有帮助。 (如果我只使用 jogl src 而不是 glenegen,它会给出 100 个错误。从 joal 添加源也无济于事)

openGL 测试

    rambo@rambo-ThinkPad-SL510:~$ /usr/lib/nux/unity_support_test -p
    OpenGL vendor string:   ATI Technologies Inc.
    OpenGL renderer string: ATI Mobility Radeon HD 4500 Series
    OpenGL version string:  3.3.11005 Compatibility Profile Context
    
    Not software rendered:    yes
    Not blacklisted:          yes
    GLX fbconfig:             yes
    GLX texture from pixmap:  yes
    GL npot or rect textures: yes
    GL vertex program:        yes
    GL fragment program:      yes
    GL vertex buffer object:  yes
    GL framebuffer object:    yes
    GL version is 1.4+:       yes
    
    Unity 3D supported:       yes

【问题讨论】:

    标签: java jogl ubuntu-10.10


    【解决方案1】:

    我修好了! =D

    你有同样的问题吗?

    症状

    治愈

    抓住你的马裤,你将度过一个狂野的夜晚。

    @_@ "JOGL 帝国的一千个图书馆降临在你身上。我们的 JUnit 测试将遮蔽太阳"

    ¬_¬"那我们就在阴影里写代码"

    Terminal中输入以下内容

    sudo apt-get install gcc libgl1-mesa-dev libglu1-mesa-dev xorg-dev libice-dev libsm-dev libx11-dev libxext-dev libxxf86vm-dev libxinerama-dev libxrandr-dev libxrender-dev
    sudo add-apt-repository ppa:eclipse-team/debian-package
    sudo apt-get update
    sudo apt-get install ant
    

    假设您使用“git”,如果没有,则获取它(谷歌搜索,安装)。本指南是为 Java 1.7(更新:和 Java 1.6)编写的,您可以通过键入来检查您的 Java 版本

    java -version
    

    进入终端。要更改您的默认 Java 版本,请键入

    sudo update-alternatives --config java
    

    进入终端 - 它显示您已安装的 java 版本,供您选择。方便的指南:

    现在是慢跑时间。创建一个文件夹,将源代码 jogl 放到您的计算机 0_0 上。没有特别的原因,我将文件夹命名为“hera”并将其放入我的主目录。

    cd ~
    mkdir hera
    cd hera/
    git clone git://jogamp.org/srv/scm/gluegen.git gluegen
    git clone git://jogamp.org/srv/scm/jogl.git jogl
    

    然后转到 ~/hera/jogl/doc/HowToBuild.html,它会告诉你接下来的步骤,不过请阅读这些“如何构建说明”:

    如何建立笔记

    这些是 JOGL 指导说明的指导说明,您刚刚在 ~/hera/jogl/doc/HowToBuild.html

    处将其 GIT 克隆到您的计算机中

    高级用户:在这种情况下更改环境变量时需要注意“source /etc/environment”不足;简单来说,这意味着您需要执行下一个命令来更改您的 PATH(和其他变量),注销然后再次登录到您的 Ubuntu。

    gksu gedit /etc/environment
    

    该命令会打开您的环境变量。是时候灭绝了。删除任何类似 java 的痕迹,包括 SDK 的路径。 CLASSPATH 和 JAVA_HOME 需要删除(将它们复制到其他地方,以便稍后将它们放回去)。你应该有类似的东西:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/.rvm/bin
    

    注意那里没有java。保存并关闭。注销,登录。然后检查它是否有效:

    echo $PATH
    

    如果您在注销 -> 后仍然看到任何 java 优点,那么“gksu gedit /etc/profile”并查看是否有任何“export”语句在其中徘徊,这些语句引用 PATH 或 CLASSPATH 或 JAVA_HOME。如果那里什么都没有...在家里检查“.bashrc”?

    高级用户:下一段将介绍 Jogl 的构建。用于构建 Jogl 的 Java 版本非常重要;它是您的代码必须使用的 Java 版本。如果您想在 Java 1.6 和 Java 1.7 中开发项目(使用 Jogl),那么您将需要具有单独构建的 Jogl 的单独文件夹 - 例如使用 Java 1.7 构建的“~/hera/”、“~/zeus/”使用 Java 1.6 构建。

    假设一切正常并且没有显示 java 路径,继续 HowToBuild.html。我没有更改可选的构建属性。做指南中提到的“蚂蚁”构建事情。如果您进行 JUnit 测试,大约需要 30 分钟,并且似乎冻结了几次并且不使用任何 CPU。没关系,稍等片刻。

    如果测试不起作用,可能是因为您的不幸时机意味着您已经取消了一个损坏的构建。您可以等待并 git pull(来自 hera),或者 SHA1 以您的方式返回一些 PUSH。

    终于

    假设您使用的是 Eclipse。删除您制作的旧 jogl 用户库(如果您制作了)。我还建议开始一个新项目。像往常一样按照指南(例如https://sites.google.com/site/justinscsstuff/jogl-tutorial-1http://www.leolol.com/drupal/game-programming),以下jar 可以在~/hera/jogl/build/jar/ 中找到(如果你使用Java 1.6,你必须在~ /hera/jogl/builf/jar/原子)

    • jogl.all.jar
    • jogl-all-natives-amd64.jar
    • newt.event.jar

    他们的本地库位置在 "~/hera/jogl/build/lib" 。然后在 "~/hera/gluegen/build" 中找到 "gluegen-rt.jar" ,我将库设置为与其他 3 个 jar 相同的库...我怀疑存在 "libgluegen-rt.so “可能已经把事情搞砸了,似乎不需要它......

    现在你的程序应该运行了!

    此时,您可以将 PATH、CLASSPATH 和 JAVA_HOME 变量放回 /etc/environment(已为 ant 事物删除)。

    【讨论】:

    • Dave 说 OpenGL 会阻止错误消息到达 eclipse =\ Alex 从 Fedora 转换到 Ubuntu 11.10。他没有任何问题 =( 也许是 11.04 -> 11.10 更新。
    【解决方案2】:

    哇,您可以通过使用 maven 处理您的项目依赖项来为自己省去一个痛苦的世界。看这里: How to make jogl work with intellij idea

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多