title: LWJGL: failed to load a library
body: <p>Have been trying to work with 'lwjgl' on linux and am running into an issue when I run my compiled code from the terminal. I am using the stable release of lwjgl 3.</p>
  
  <p>I downloaded the lwjgl.jar from the website and run the command <code>javac -cp lwjgl.jar: Main.java</code>
  which compiles the code fine. Then I run: <code>java -cp lwjgl.jar: Main</code> after and it throws this error;</p>
  
  <pre><code>[LWJGL] Failed to load a library. Possible solutions:
      a) Set -Djava.library.path or -Dorg.lwjgl.librarypath to the directory that contains the shared libraries.
      b) Add the JAR(s) containing the shared libraries to the classpath.
  [LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
  Exception in thread "EndlessRunner" java.lang.UnsatisfiedLinkError: Failed to locate library: liblwjgl.so
      at org.lwjgl.system.Library.loadSystemRelative(Library.java:100)
      at org.lwjgl.system.Library.loadSystem(Library.java:71)
      at org.lwjgl.system.Library.&lt;clinit&gt;(Library.java:43)
      at org.lwjgl.system.MemoryAccess.&lt;clinit&gt;(MemoryAccess.java:17)
      at org.lwjgl.system.Pointer.&lt;clinit&gt;(Pointer.java:22)
      at org.lwjgl.glfw.GLFW.&lt;clinit&gt;(GLFW.java:562)
      at Main.init(Main.java:31)
      at Main.run(Main.java:78)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p>I'm not sure if I missed some files that I needed too or if I'm going about this entirely the wrong way. Here is the code I am using, it's just some that I found online and I'm using as a test.</p>
  
  <pre><code>import static org.lwjgl.glfw.GLFW.*;
  import static org.lwjgl.opengl.GL11.*;
  import static org.lwjgl.system.MemoryUtil.*;
  import java.nio.ByteBuffer;
  import org.lwjgl.glfw.GLFWVidMode;
  
  public class Main implements Runnable{
  
  private Thread thread;
  public boolean running = true;
  
  private long window;
  
  private int width = 1200, height = 800;
  
  public static void main(String args[]){
      Main game = new Main();
      game.start();
  }
  
  public void start(){
      running = true;
      thread = new Thread(this, "EndlessRunner");
      thread.start();
  }
  
  public void init(){
      // Initializes our window creator library - GLFW 
      // This basically means, if this glfwInit() doesn't run properlly
      // print an error to the console
      if(glfwInit() != true){
          // Throw an error.
          System.err.println("GLFW initialization failed!");
      }
  
      // Allows our window to be resizable
      glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
  
      // Creates our window. You'll need to declare private long window at the
      // top of the class though. 
      // We pass the width and height of the game we want as well as the title for
      // the window. The last 2 NULL parameters are for more advanced uses and you
      // shouldn't worry about them right now.
      window = glfwCreateWindow(width, height, "Endless Runner", NULL, NULL);
  
      // This code performs the appropriate checks to ensure that the
      // window was successfully created. 
      // If not then it prints an error to the console
      if(window == NULL){
          // Throw an Error
          System.err.println("Could not create our Window!");
      }
  
      // creates a bytebuffer object 'vidmode' which then queries 
      // to see what the primary monitor is. 
      //ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
      // Sets the initial position of our game window. 
      glfwSetWindowPos(window, 100, 100);
      // Sets the context of GLFW, this is vital for our program to work.
      glfwMakeContextCurrent(window);
      // finally shows our created window in all it's glory.
      glfwShowWindow(window);
  }
  
  public void update(){
      // Polls for any window events such as the window closing etc.
      glfwPollEvents();
  }
  
  public void render(){
      // Swaps out our buffers
      glfwSwapBuffers(window);
  }
  
  @Override
  public void run() {
      // All our initialization code
      init();
      // Our main game loop
      while(running){
          update();
          render();
          // Checks to see if either the escape button or the
          // red cross at the top were pressed.
          // if so sets our boolean to false and closes the
          // thread.
          if(glfwWindowShouldClose(window) == true){
              running = false;
          }
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Any help you guys can give would be very much appreciated.</p>
  
  <p>Thanks.</p>