gpt4 book ai didi

c++ - OpenGL 程序无法链接?

转载 作者:行者123 更新时间:2023-11-30 05:00:22 31 4
gpt4 key购买 nike

我正在尝试使用找到的 GA 沙盒源代码 here在 Linux 上(特别是 Ubuntu 16.04)。然而,在编译第一个示例时,我遇到了这个错误。

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 得到纠正。然后我遇到了这个错误。我在网上四处寻找类似的错误,发现 this post ,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 都不起作用。

我可能忽略了什么?或者是否有任何概念可以帮助缩小我的搜索范围?

最佳答案

尝试将 libgasandbox.a 移到命令行上所有 -l 选项之前。所以你的命令看起来像这样:

g++ -g -O2 -o chap1ex1 chap1ex1.o ../../libgasandbox/libgasandbox.a -lGL -lGLU -lglut

参数顺序对静态链接很重要,如 this answer 中所述: 依赖库的东西必须先于该库。 libgasandbox 显然依赖于 GLU,因此将其提前应该可以解决该错误。

如果 GLU 或 glut 依赖它(我不确定他们是否这样做),您可能还需要将 -lGL 移到最后。

关于c++ - OpenGL 程序无法链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843607/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com