static build glew & glfw on linux

笑着哭i 提交于 2019-12-24 08:07:54

问题


In my project directory, i have:

  • ./external/glew, which has glew compiled from source (ran make)
  • ./external/glfw, which has glfw also compiled from source (ran make x11)

in my .c source code:

#include <stdio.h>
#include <stdlib.h>

#include "external/glew/include/GL/glew.h"
#include "external/glfw/include/GL/glfw.h"

i tried to compile using GCC:

gcc test1.c -o test1 -DGLEW_STATIC -L./external/glew/lib -lGLEW -lGLU -lGL \
-L./external/glfw/lib/x11 -lglfw

./external/glew/lib is where the libGLEW.a is and ./external/glfw/lib/x11 is where the libglfw.a is.

and it compiles without error. but then i try to run ./test1 it gives me:

./test1: error while loading shared libraries: libGLEW.so.1.6: cannot
open shared object file: No such file or directory

how do i compile glew & glfw statically?

EDIT 1 Thanks for the help guys. After some help from people in stackoverflow and old nabble I manage to write it down what needs to be done to statically linked GLFW and GLEW and put it on http://www.phacks.net/static-compile-glfw-and-glew/


回答1:


Static libraries are not linked with -l… but just added to the linker source files. However please double check you really want to link those statically. The problem you have here is that the dynamic linker on *nix systems will by default only look into the system library directories and the path specified in the LD_LIBARY_PATH environment variable.

However it is possible to add relative linker paths to the executable, where libraries are located, too (--rpath linker option). That way you can ship the libraries in a directory relative to your executable, independently from the system libraries. If you do this, you also should look into binreloc



来源:https://stackoverflow.com/questions/7132340/static-build-glew-glfw-on-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!