OpenGL 程序无法链接?
OpenGL program failing to link?
我正在尝试使用Linux(特别是Ubuntu 16.04(上的GA Sandbox源代码。然而,在编译第一个示例时,我留下了这个错误。
g++ -g -O2 -o chap1ex1 chap1ex1.o -lGL -lGLU -lglut ../../libgasandbox/libgasandbox.a
../../libgasandbox/libgasandbox.a(libgasandbox_a-gl_util.o): In function
`pickLoadMatrix()':
/mnt/c/GASandbox/ga_sandbox-1.0.7/libgasandbox/gl_util.cpp:231: undefined
reference to `gluPickMatrix'
collect2: error: ld returned 1 exit status
Makefile:216: recipe for target 'chap1ex1' failed
我应该提到,提供上面提到的 Makefile 的配置脚本最初没有链接 -lGL 或 -lGLU。这给了我一个与缺少 DSO 有关的错误,该错误已通过链接 -lGL 进行更正。然后我以这个错误结束。我在网上查找了任何类似的错误并找到了这篇文章,OP 通过链接 -lGLU 解决了它。我就没那么幸运了。
这是有问题的代码片段,来自gl_util.cpp。
#include <string>
#include "gl_util.h"
#if defined (__APPLE__) || defined (OSX)
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
// code inbetween
namespace GLpick {
bool g_pickActive = false;
int g_OpenGL_pick[4] = {0, 0, 0, 0};
double g_frustumNear = 1.0;
double g_frustumFar = 100.0;
double g_frustumWidth = -1.0;
double g_frustumHeight = -1.0;
int g_pickWinSize = 4;
}
void pickLoadMatrix() {
if (!GLpick::g_pickActive) return;
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
gluPickMatrix(
GLpick::g_OpenGL_pick[0], GLpick::g_OpenGL_pick[1],
GLpick::g_OpenGL_pick[2] * 2 + 1, GLpick::g_OpenGL_pick[3] * 2 + 1,
viewport);
}
在 glu.h 中,gluPickMatrix(( 的签名是GLAPI void GLAPIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
。因此,我尝试将int g_OpenGL_pick[] = {0, 0, 0, 0};
更改为GLdouble g_OpenGL_pick[] = {0.0, 0.0, 0.0, 0.0};
。这和将单个值转换为 GLdouble 都不起作用。
我可能忽略了什么? 或者是否有任何概念可以帮助缩小搜索范围?
尝试在命令行上所有-l
选项之前移动libgasandbox.a
。所以你的命令看起来像这样:
g++ -g -O2 -o chap1ex1 chap1ex1.o ../../libgasandbox/libgasandbox.a -lGL -lGLU -lglut
参数的顺序对于静态链接很重要,如本答案所述:依赖于库的东西必须排在该库之前。libgasandbox
显然取决于 GLU,所以把它放得更早应该可以解决这个错误。
您可能还需要将-lGL
移动到最后,如果 GLU 或过剩依赖于它(我不确定他们是否这样做(。
- 基于boost的程序的静态链接——zlib问题
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 将gsl c++程序与"英特尔MKL"链接
- 将 glade 文件与程序 g++ 链接
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- 在树莓派上用libtorch构建程序时的链接问题
- 我的应用程序无法在安卓上使用OpenSSL进行链接
- C++实用程序::转换在静态链接库中不起作用
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 如何使用QtCreator将应用程序与"libqsqlpsql.so"链接?
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- 如何在 debian 下正确链接一个 opengl 程序?
- 在发布模式下启动使用库的静态链接编译的应用程序时出错
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 检查G 是否可以链接程序
- C链接程序并在主函数上使用其他程序的方法(数独)
- 使用g++链接程序集和C++时未定义的引用
- 如何在c++中链接程序
- 链接C程序到c++共享库
- 无法使用 Boost.File system 链接程序