статическая сборка glew & glfw на Linux - PullRequest
1 голос
/ 20 августа 2011

В моем каталоге проектов у меня есть:

  • . / External / glew, скомпилированный из исходного кода glew (run make)
  • . / External / glfw, у которого glfw также скомпилирован из исходного кода (run 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/

1 Ответ

1 голос
/ 20 августа 2011

Статические библиотеки не связаны с -l…, а просто добавляются в исходные файлы компоновщика.Однако, пожалуйста, проверьте, действительно ли вы хотите связать их статически.Проблема, с которой вы столкнулись, заключается в том, что динамический компоновщик в системах * nix по умолчанию просматривает только каталоги системных библиотек и путь, указанный в переменной среды LD_LIBARY_PATH.

Однако можно добавить относительные пути компоновщика висполняемый файл, в котором также находятся библиотеки (опция компоновщика --rpath).Таким образом, вы можете отправлять библиотеки в каталоге относительно вашего исполняемого файла независимо от системных библиотек.Если вы сделаете это, вы также должны заглянуть в binreloc

...