2

在我的项目目录中,我有:

  • ./external/glew,已从源代码编译 glew(运行 make)
  • ./external/glfw,其中 glfw 也是从源代码编译的(运行 make x11)

在我的 .c 源代码中:

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

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

我尝试使用 GCC 进行编译:

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

./external/glew/lib 是 libGLEW.a 所在的位置, ./external/glfw/lib/x11 是 libglfw.a 所在的位置。

它编译没有错误。但后来我尝试运行 ./test1 它给了我:

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

我如何静态编译 glew 和 glfw?

编辑 1感谢您的帮助。在 stackoverflow 和老 nabble 的一些人的帮助下,我设法写下静态链接 GLFW 和 GLEW 需要做的事情,并将其放在http://www.phacks.net/static-compile-glfw-and-glew /

4

1 回答 1

2

静态库不使用 -l... 链接,而只是添加到链接器源文件中。但是,请仔细检查您是否真的想静态链接这些。您在这里遇到的问题是 *nix 系统上的动态链接器默认情况下只会查看系统库目录和 LD_LIBARY_PATH 环境变量中指定的路径。

但是,也可以将相对链接器路径添加到库所在的可执行文件(--rpath链接器选项)。这样,您可以将库发布到与可执行文件相关的目录中,独立于系统库。如果你这样做,你也应该看看binreloc

于 2011-08-20T15:14:55.680 回答