- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在运行 Ubuntu 13.10 并尝试编译那部分示例 OpenGL 代码:
#include "GL/freeglut.h"
#include "GL/gl.h"
/* display function - code from:
http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library.
The following code is the same for any platform */
void renderFunction()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
/* Main method - main entry point of application
the freeglut library does the window creation work for us,
regardless of the platform. */
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL - First window demo");
glutDisplayFunc(renderFunction);
glutMainLoop();
return 0;
}
我已经使用 Eclipse 来构建项目,但是它在链接级别上失败了:
Building target: opengl_test
Invoking: GCC C++ Linker
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
./src/opengl_test.o: In function `renderFunction()':
/var/www/opengl_test/Debug/../src/opengl_test.cpp:10: undefined reference to `glClearColor'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:11: undefined reference to `glClear'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:12: undefined reference to `glColor3f'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:13: undefined reference to `glOrtho'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:14: undefined reference to `glBegin'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:15: undefined reference to `glVertex2f'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:16: undefined reference to `glVertex2f'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:17: undefined reference to `glVertex2f'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:18: undefined reference to `glVertex2f'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:19: undefined reference to `glEnd'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:20: undefined reference to `glFlush'
./src/opengl_test.o: In function `main':
/var/www/opengl_test/Debug/../src/opengl_test.cpp:28: undefined reference to `glutInit'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:29: undefined reference to `glutInitDisplayMode'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:30: undefined reference to `glutInitWindowSize'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:31: undefined reference to `glutInitWindowPosition'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:32: undefined reference to `glutCreateWindow'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:33: undefined reference to `glutDisplayFunc'
/var/www/opengl_test/Debug/../src/opengl_test.cpp:34: undefined reference to `glutMainLoop'
collect2: error: ld returned 1 exit status
make: *** [opengl_test] Error 1
...所以我尝试了 G++:
g++ -lGL -lglut opengl_test.cpp -o test
但是它提供的输出与 Eclipse 几乎相同。
我想也许我需要手动将必要的库符号链接(symbolic link)到/usr/lib。我搜索了库:
$ sudo apt-file search libGL.so
fglrx: /usr/lib/fglrx/libGL.so
fglrx: /usr/lib/fglrx/libGL.so.1
fglrx: /usr/lib/fglrx/libGL.so.1.2
fglrx: /usr/lib32/fglrx/libGL.so.1.2
fglrx-updates: /usr/lib/fglrx/libGL.so
fglrx-updates: /usr/lib/fglrx/libGL.so.1
fglrx-updates: /usr/lib/fglrx/libGL.so.1.2
fglrx-updates: /usr/lib32/fglrx/libGL.so.1.2
libgl1-mesa-dev: /usr/lib/x86_64-linux-gnu/libGL.so
libgl1-mesa-dev: /usr/lib/x86_64-linux-gnu/mesa/libGL.so
libgl1-mesa-glx: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libgl1-mesa-glx: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
libgl1-mesa-glx-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
nvidia-173: /usr/lib/nvidia-173/libGL.so
nvidia-173: /usr/lib/nvidia-173/libGL.so.1
nvidia-173: /usr/lib/nvidia-173/libGL.so.173.14.37
nvidia-173: /usr/lib32/nvidia-173/libGL.so
nvidia-173: /usr/lib32/nvidia-173/libGL.so.1
nvidia-173: /usr/lib32/nvidia-173/libGL.so.173.14.37
nvidia-304: /usr/lib/nvidia-304/libGL.so
nvidia-304: /usr/lib/nvidia-304/libGL.so.1
nvidia-304: /usr/lib/nvidia-304/libGL.so.304.88
nvidia-304: /usr/lib32/nvidia-304/libGL.so
nvidia-304: /usr/lib32/nvidia-304/libGL.so.1
nvidia-304: /usr/lib32/nvidia-304/libGL.so.304.88
nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so
nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so.1
nvidia-304-updates: /usr/lib/nvidia-304-updates/libGL.so.304.108
nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so
nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so.1
nvidia-304-updates: /usr/lib32/nvidia-304-updates/libGL.so.304.108
nvidia-319: /usr/lib/nvidia-319/libGL.so
nvidia-319: /usr/lib/nvidia-319/libGL.so.1
nvidia-319: /usr/lib/nvidia-319/libGL.so.319.32
nvidia-319: /usr/lib32/nvidia-319/libGL.so
nvidia-319: /usr/lib32/nvidia-319/libGL.so.1
nvidia-319: /usr/lib32/nvidia-319/libGL.so.319.32
nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so
nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so.1
nvidia-319-updates: /usr/lib/nvidia-319-updates/libGL.so.319.60
nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so
nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so.1
nvidia-319-updates: /usr/lib32/nvidia-319-updates/libGL.so.319.60
primus-libs: /usr/lib/x86_64-linux-gnu/primus/libGL.so.1
和
$ sudo apt-file search libglut.so
freeglut3: /usr/lib/x86_64-linux-gnu/libglut.so.3
freeglut3: /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0
freeglut3-dev: /usr/lib/x86_64-linux-gnu/libglut.so
制作符号链接(symbolic link):
sudo ln -s /usr/lib/fglrx/libGL.so /usr/lib/libGL.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so
但是还是没有用。出现了相同的链接问题。
最佳答案
尝试将您的库放在源文件之后:
g++ opengl_test.cpp -lGL -lglut
要使 Eclipse 正常工作,您需要更改所谓的“命令行模式”。我实际上不是 Eclipse 用户,但请尝试检查此处的设置:C/C++ Build -> Settings -> Cross G++ Linker
,或其他一些与 Linker 相关的设置。
说明:当前 ld
默认链接到 --as-needed
标志。在这种模式下,在链接任何库之前,ld
会检查该库中的某些符号是否在某处需要。 ld
按顺序执行此检查,因此如果您在源文件之前链接某些内容,则该库将被排除在外。可以使用 -Wl,--no-as-needed
gcc
标志禁用此行为。
来自 man ld
:
--as-needed
--no-as-needed
This option affects ELF DT_NEEDED tags for dynamic libraries men-
tioned on the command line after the --as-needed option. Normally,
the linker will add a DT_NEEDED tag for each dynamic library men-
tioned on the command line, regardless of whether the library is
actually needed. --as-needed causes DT_NEEDED tags to only be
emitted for libraries that satisfy some symbol reference from regu-
lar objects which is undefined at the point that the library was
linked. --no-as-needed restores the default behaviour.
关于c++ - Ubuntu 13.10 C++ OpenGL GLUT - 链接问题 - 未定义对 `glClearColor' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244712/
我很难理解为什么我用 openGL 做的窗口保持黑色。 我没有看到我在代码中哪里出错了: import com.jogamp.opengl.awt.GLCanvas import com.jogamp
我开始了 sdl 和 opengl 类(class)。当我尝试更改背景时遇到一个问题,此功能没有给出任何结果。我使用 MSVS 和 Win8.1。我正在尝试使用各种带参数的选项。我总是有黑色背景。有什
我正在将 GLES2 和 EGL 与 PyOpenGL 一起使用,我正在调用 glClearColor(0.0, 0.0, 0.0, 1.0) .后 glClear(GL_COLOR_BUFFER_B
我是 LWJGL 和 OpenGL 的新手,我已经进行了一些谷歌搜索,但似乎找不到任何与此相关的其他内容。 我制作了一个基本的测试程序来创建一个空白窗口。我可以创建窗口并正常运行应用程序,但如果我尝试
glViewport(x(), y(), width(), height()); glDisable(GL_DEPTH_TEST); glClearColor(0, 0.3, 0, 1); glCle
我正在开发一个简单的 OpenGL 应用程序,它允许用户通过单击并向左(使其不那么强烈)或向右(更加强烈)拖动来调整简单窗口的背景颜色。例如,当向右拖动时,我有这样的结果: intensity +=
我正在尝试在 C++ 中运行我的第一个 opengl 程序,它会在 Mac OS X 上的终端打开一个窗口、设置背景颜色并给出标题。 代码可以正常编译和链接。当我运行该程序时,窗口和标题可以正常打开,
gl.glClearColor(0f, 0f, 0f, 1.0f); 如何阅读?如: set clear color 或 clear the color ? 最佳答案 @Mikola 的回答是正确的,
我正在尝试创建一个单独的 OpenGL 窗口,其中包含在 RGB 颜色选择器中选择的一些背景颜色,但看起来我在这个函数中遗漏了一些重要的东西。当我想将颜色设置为标准时,例如红色,它可以工作。 glCl
我只是想绘制背景,用 0.5f 透明黑色覆盖它以使其变暗,并在其顶部渲染暂停菜单。 我已经尝试过: Gdx.gl.glClearColor(0f, 0f, 0f, 0.5f); Gdx
从 paintGL() 之外的各个地方调用 glClearColor 时,我遇到了一个小问题。目的是让用户能够即时设置清晰的颜色,但这不会按计划工作,除非在 paintGL 中的每一帧调用 glCle
我想在运行时更改我的应用程序的背景颜色。所以在单击按钮时我首先调用: GLES20.glClearColor(color[0], color[1], color[2], color[3]); 然后我调
我有一个QMainWindow,里面有一个QGLWidget。我希望小部件显示我自己选择的“清晰”颜色,而不是默认的黑屏。 void MyQGLWidget::initializeGL(void) {
我一直在努力理解 glReadPixels 的输出,这在理论上似乎很简单,但实际上会产生令人费解的(至少对我而言)结果。 假设我有一个简单的片段着色器,它绘制一个颜色值为 vec4(0.2, 0, 0
在 OpenGL 中,为了获得适当的透明度效果,我应该使用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)但是使用该混合函数 glClearColo
搜索 this question 答案的结果,我遇到了一个相当不舒服的发现。 似乎仅以 60 fps 渲染 glClearColor() 会使 iPhone 的渲染利用率达到 27%。 这意味着,几乎
我有一个名为 renderLoop 的方法,它将处理我所有的绘图。当我运行该程序时,出现此异常。这个异常到底是什么以及如何修复它? 当我从此类外部的函数回调(framebuffer_size_call
我开发了一个基于 jupyter notebook 的 api,它似乎在 linux 中运行良好,但在 windows 中我遇到了这个错误,有些人认为这与没有绘制上下文有关,或者当时没有上下文调用了
在应用程序的res/values/colors.xml 文件中,红色定义为#AARRGGBB 格式: #ffff0000 如何将此颜色用作 glClearColor 和其他 OpenGL ES
我是第一次尝试使用 OpenGL。我在网上查看了一些代码,然后尝试编写自己的代码,但我总是得到一个空的(透明的)窗口。 (我是用GLUT开窗的)。 我以为我做错了什么,所以我从here复制了代码到我的
我是一名优秀的程序员,十分优秀!