Больше не может связываться с opengl

После обновления до 11.10 я не могу связать код с libgl / glut. freeglut3-dev и т. д., и похоже, что их тоже можно найти. Я действительно не уверен, что происходит.

Makefile

gltest: gltest.cc
    gcc -Wall -lglut -lGLU -lGL gltest.cc -o gltest

gltest.cc

#include <GL/glut.h>

int main(int argc, char **argv) {

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DEPTH |     GLUT_DOUBLE | GLUT_RGBA);
  glutInitWindowPosition(100,100);
  //glutInitWindowSizendowSize(320,320);
  glutCreateWindow("test");

  return 1;
}

Выход

jonas@fortress:~/dev/checkouts/test$ make
gcc -Wall -lglut -lGLU -lGL gltest.cc -o gltest
/tmp/cct1HevY.o: In function `main':
gltest.cc:(.text+0x1e): undefined reference to `glutInit'
gltest.cc:(.text+0x28): undefined reference to `glutInitDisplayMode'
gltest.cc:(.text+0x37): undefined reference to `glutInitWindowPosition'
gltest.cc:(.text+0x41): undefined reference to `glutCreateWindow'
collect2: ld returned 1 exit status
make: *** [gltest] Error 1

При связывании с --verbose

attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib/libglut.so succeeded

И тогда при проверке символов в этом файле

$ readelf -Ws /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib/libglut.so|grep glutInit
   278: 000000000001dfc0  1581 FUNC    GLOBAL DEFAULT   11 glutInit

я сейчас очень смущен.

1
задан 17 October 2011 в 00:11

6 ответов

Ваш Makefile больше не работает из-за перехода toolchain (переход был запланирован для natty, но изменение, из-за которого ваша проблема была сделана в oneiric). Флаг компоновщика --as-needed активируется по умолчанию в Ubuntu 11.10. Это вызывает проблему, которую вы наблюдаете. Решение - это именно то, что вы описали в своем ответе.

Параметр --as-needed делает компоновщик чувствительным к упорядочению библиотек в командной строке. Возможно, вам придется переместить некоторые библиотеки позже в командной строке, чтобы они приходили за другими библиотеками или файлами, которые требуют от них символов.

0
ответ дан 25 July 2018 в 21:08

Ваш Makefile больше не работает из-за перехода toolchain (переход был запланирован для natty, но изменение, из-за которого ваша проблема была сделана в oneiric). Флаг компоновщика --as-needed активируется по умолчанию в Ubuntu 11.10. Это вызывает проблему, которую вы наблюдаете. Решение - это именно то, что вы описали в своем ответе.

Параметр --as-needed делает компоновщик чувствительным к упорядочению библиотек в командной строке. Возможно, вам придется переместить некоторые библиотеки позже в командной строке, чтобы они приходили за другими библиотеками или файлами, которые требуют от них символов.

0
ответ дан 2 August 2018 в 02:49

Ваш Makefile больше не работает из-за перехода toolchain (переход был запланирован для natty, но изменение, из-за которого ваша проблема была сделана в oneiric). Флаг компоновщика --as-needed активируется по умолчанию в Ubuntu 11.10. Это вызывает проблему, которую вы наблюдаете. Решение - это именно то, что вы описали в своем ответе.

Параметр --as-needed делает компоновщик чувствительным к упорядочению библиотек в командной строке. Возможно, вам придется переместить некоторые библиотеки позже в командной строке, чтобы они приходили за другими библиотеками или файлами, которые требуют от них символов.

0
ответ дан 4 August 2018 в 18:35

Ваш Makefile больше не работает из-за перехода toolchain (переход был запланирован для natty, но изменение, из-за которого ваша проблема была сделана в oneiric). Флаг компоновщика --as-needed активируется по умолчанию в Ubuntu 11.10. Это вызывает проблему, которую вы наблюдаете. Решение - это именно то, что вы описали в своем ответе.

Параметр --as-needed делает компоновщик чувствительным к упорядочению библиотек в командной строке. Возможно, вам придется переместить некоторые библиотеки позже в командной строке, чтобы они приходили за другими библиотеками или файлами, которые требуют от них символов.

0
ответ дан 6 August 2018 в 03:01

Он работает, когда я положил -lGLU -lGL -lglut в конец вызова gcc. Я все еще уверен, что это сработало в прошлом.

1
ответ дан 7 August 2018 в 20:42

Он работает, когда я положил -lGLU -lGL -lglut в конец вызова gcc. Я все еще уверен, что это сработало в прошлом.

1
ответ дан 10 August 2018 в 09:05

Другие вопросы по тегам:

Похожие вопросы: