Ubuntu 13.10 C OpenGL GLUT – 链接问题 – 对`glClearColor’的未定义引用

前端之家收集整理的这篇文章主要介绍了Ubuntu 13.10 C OpenGL GLUT – 链接问题 – 对`glClearColor’的未定义引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行Ubuntu 13.10并尝试编译该部分示例OpenGL代码
  1. #include "GL/freeglut.h"
  2. #include "GL/gl.h"
  3.  
  4. /* display function - code from:
  5. http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
  6. This is the actual usage of the OpenGL library.
  7. The following code is the same for any platform */
  8. void renderFunction()
  9. {
  10. glClearColor(0.0,0.0,0.0);
  11. glClear(GL_COLOR_BUFFER_BIT);
  12. glColor3f(1.0,1.0,1.0);
  13. glOrtho(-1.0,-1.0,1.0);
  14. glBegin(GL_POLYGON);
  15. glVertex2f(-0.5,-0.5);
  16. glVertex2f(-0.5,0.5);
  17. glVertex2f(0.5,-0.5);
  18. glEnd();
  19. glFlush();
  20. }
  21.  
  22. /* Main method - main entry point of application
  23. the freeglut library does the window creation work for us,regardless of the platform. */
  24. int main(int argc,char** argv)
  25. {
  26. glutInit(&argc,argv);
  27. glutInitDisplayMode(GLUT_SINGLE);
  28. glutInitWindowSize(500,500);
  29. glutInitWindowPosition(100,100);
  30. glutCreateWindow("OpenGL - First window demo");
  31. glutDisplayFunc(renderFunction);
  32. glutMainLoop();
  33. return 0;
  34. }

我已经使用Eclipse来构建项目,但它在链接级别失败:

  1. Building target: opengl_test
  2. Invoking: GCC C++ Linker
  3. g++ -L/usr/lib -L/usr/lib/fglrx -L/usr/lib/x86_64-linux-gnu -L/usr/lib/i386-linux-gnu/mesa -L/usr/lib/x86_64-linux-gnu/mesa -o "opengl_test" ./src/opengl_test.o
  4. ./src/opengl_test.o: In function `renderFunction()':
  5. /var/www/opengl_test/Debug/../src/opengl_test.cpp:10: undefined reference to `glClearColor'
  6. /var/www/opengl_test/Debug/../src/opengl_test.cpp:11: undefined reference to `glClear'
  7. /var/www/opengl_test/Debug/../src/opengl_test.cpp:12: undefined reference to `glColor3f'
  8. /var/www/opengl_test/Debug/../src/opengl_test.cpp:13: undefined reference to `glOrtho'
  9. /var/www/opengl_test/Debug/../src/opengl_test.cpp:14: undefined reference to `glBegin'
  10. /var/www/opengl_test/Debug/../src/opengl_test.cpp:15: undefined reference to `glVertex2f'
  11. /var/www/opengl_test/Debug/../src/opengl_test.cpp:16: undefined reference to `glVertex2f'
  12. /var/www/opengl_test/Debug/../src/opengl_test.cpp:17: undefined reference to `glVertex2f'
  13. /var/www/opengl_test/Debug/../src/opengl_test.cpp:18: undefined reference to `glVertex2f'
  14. /var/www/opengl_test/Debug/../src/opengl_test.cpp:19: undefined reference to `glEnd'
  15. /var/www/opengl_test/Debug/../src/opengl_test.cpp:20: undefined reference to `glFlush'
  16. ./src/opengl_test.o: In function `main':
  17. /var/www/opengl_test/Debug/../src/opengl_test.cpp:28: undefined reference to `glutInit'
  18. /var/www/opengl_test/Debug/../src/opengl_test.cpp:29: undefined reference to `glutInitDisplayMode'
  19. /var/www/opengl_test/Debug/../src/opengl_test.cpp:30: undefined reference to `glutInitWindowSize'
  20. /var/www/opengl_test/Debug/../src/opengl_test.cpp:31: undefined reference to `glutInitWindowPosition'
  21. /var/www/opengl_test/Debug/../src/opengl_test.cpp:32: undefined reference to `glutCreateWindow'
  22. /var/www/opengl_test/Debug/../src/opengl_test.cpp:33: undefined reference to `glutDisplayFunc'
  23. /var/www/opengl_test/Debug/../src/opengl_test.cpp:34: undefined reference to `glutMainLoop'
  24. collect2: error: ld returned 1 exit status
  25. make: *** [opengl_test] Error 1

……所以我试过G:

  1. g++ -lGL -lglut opengl_test.cpp -o test

但它提供的输出与Eclipse的输出几乎相同.

我想也许我需要手动将符号链接文件夹/usr/lib.
搜索过libs:

  1. $sudo apt-file search libGL.so
  2. fglrx: /usr/lib/fglrx/libGL.so
  3. fglrx: /usr/lib/fglrx/libGL.so.1
  4. fglrx: /usr/lib/fglrx/libGL.so.1.2
  5. fglrx: /usr/lib32/fglrx/libGL.so.1.2
  6. fglrx-updates: /usr/lib/fglrx/libGL.so
  7. fglrx-updates: /usr/lib/fglrx/libGL.so.1
  8. fglrx-updates: /usr/lib/fglrx/libGL.so.1.2
  9. fglrx-updates: /usr/lib32/fglrx/libGL.so.1.2
  10. libgl1-mesa-dev: /usr/lib/x86_64-linux-gnu/libGL.so
  11. libgl1-mesa-dev: /usr/lib/x86_64-linux-gnu/mesa/libGL.so
  12. libgl1-mesa-glx: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
  13. libgl1-mesa-glx: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
  14. libgl1-mesa-glx-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
  15. nvidia-173: /usr/lib/nvidia-173/libGL.so
  16. nvidia-173: /usr/lib/nvidia-173/libGL.so.1
  17. nvidia-173: /usr/lib/nvidia-173/libGL.so.173.14.37
  18. nvidia-173: /usr/lib32/nvidia-173/libGL.so
  19. nvidia-173: /usr/lib32/nvidia-173/libGL.so.1
  20. nvidia-173: /usr/lib32/nvidia-173/libGL.so.173.14.37
  21. nvidia-304: /usr/lib/nvidia-304/libGL.so
  22. nvidia-304: /usr/lib/nvidia-304/libGL.so.1
  23. nvidia-304: /usr/lib/nvidia-304/libGL.so.304.88
  24. nvidia-304: /usr/lib32/nvidia-304/libGL.so
  25. nvidia-304: /usr/lib32/nvidia-304/libGL.so.1
  26. nvidia-304: /usr/lib32/nvidia-304/libGL.so.304.88
  27. nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so
  28. nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so.1
  29. nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so.304.108
  30. nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so
  31. nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so.1
  32. nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so.304.108
  33. nvidia-319: /usr/lib/nvidia-319/libGL.so
  34. nvidia-319: /usr/lib/nvidia-319/libGL.so.1
  35. nvidia-319: /usr/lib/nvidia-319/libGL.so.319.32
  36. nvidia-319: /usr/lib32/nvidia-319/libGL.so
  37. nvidia-319: /usr/lib32/nvidia-319/libGL.so.1
  38. nvidia-319: /usr/lib32/nvidia-319/libGL.so.319.32
  39. nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so
  40. nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so.1
  41. nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so.319.60
  42. nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so
  43. nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so.1
  44. nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so.319.60
  45. primus-libs: /usr/lib/x86_64-linux-gnu/primus/libGL.so.1

  1. $sudo apt-file search libglut.so
  2. freeglut3: /usr/lib/x86_64-linux-gnu/libglut.so.3
  3. freeglut3: /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0
  4. freeglut3-dev: /usr/lib/x86_64-linux-gnu/libglut.so

制作符号链接

  1. sudo ln -s /usr/lib/fglrx/libGL.so /usr/lib/libGL.so
  2. sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so

但它仍然无济于事.出现了相同的链接问题.

>如何调试该问题?
>我如何知道选择哪个lib并将它们链接到/usr/lib?我选择了fglrx,因为我的GPU驱动程序正在运行fglrx.
>我是否每次都需要手动将库从/usr/lib…./somewhere链接到/usr/lib?

尝试将您的库放在源文件之后:
  1. g++ opengl_test.cpp -lGL -lglut

要使Eclipse工作,您需要更改所谓的“命令行模式”.我实际上不是Eclipse用户,但尝试在这里检查设置:C/C++ Build – >设置 – > Cross G Linker或其他一些与Linker相关的设置.

澄清:当前ld默认链接–as-needed标志.在链接任何库之前的这种模式中,ld检查这个库中的某些符号是否需要某处. ld按顺序执行此检查,因此如果您在源文件之前链接某些内容,则会排除此库.可以使用-Wl,– no-as-needed gcc标志禁用此行为.

从男人ld:

  1. --as-needed
  2. --no-as-needed
  3. This option affects ELF DT_NEEDED tags for dynamic libraries men-
  4. tioned on the command line after the --as-needed option. Normally,the linker will add a DT_NEEDED tag for each dynamic library men-
  5. tioned on the command line,regardless of whether the library is
  6. actually needed. --as-needed causes DT_NEEDED tags to only be
  7. emitted for libraries that satisfy some symbol reference from regu-
  8. lar objects which is undefined at the point that the library was
  9. linked. --no-as-needed restores the default behavIoUr.

猜你在找的Ubuntu相关文章