gpt4 book ai didi

c++ - GLEW 1.10.0段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:45 24 4
gpt4 key购买 nike

为什么在使用GLEW 1.10.0时出现分段错误? (我在问题的底部提供了系统的详细信息。)

我下载并编译了GLEW。编译(全部完成)和安装(sudo make install.all)均有效,并且未显示任何错误。 GLEW库安装在/usr/lib64/libGLEW.so.1.10.0中。

我创建了一个使用GLEW和glfw3(3.0.3)的简单OpenGL测试程序(见下文)。当程序使用已安装的GLEW lib时,会发生分段错误。当我在测试程序中使用GLEW源代码时,该程序将运行。

但是,如果我加载着色器,然后使用glGetProgramInterfaceiv查询编译的OpenGL程序,我将再次遇到分段错误。



细节:

细分错误发生在


运行glewinfo
运行visualinfo
测试程序(详细信息如下)
调用glGetProgramInterfaceiv(详细信息如下)


使用gdb的glewinfo的堆栈跟踪

#0  0x00007ffff6d5fca0 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff51b32f6 in __driCreateNewScreen_20050727 () from /usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
#2 0x00007ffff7557c92 in ?? () from /usr/lib64/libGL.so.1
#3 0x00007ffff7553ea1 in ?? () from /usr/lib64/libGL.so.1
#4 0x00007ffff75540ce in glXChooseVisual () from /usr/lib64/libGL.so.1
#5 0x0000000000454883 in glewCreateContext ()
#6 0x000000000043b224 in main ()


使用gdb的visualinfo的堆栈跟踪

#0  0x00007ffff6d5fca0 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff51b32f6 in __driCreateNewScreen_20050727 () from /usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
#2 0x00007ffff7557c92 in ?? () from /usr/lib64/libGL.so.1
#3 0x00007ffff7553ea1 in ?? () from /usr/lib64/libGL.so.1
#4 0x00007ffff75540ce in glXChooseVisual () from /usr/lib64/libGL.so.1
#5 0x000000000040237b in CreateContext ()
#6 0x000000000040103e in main ()


下面是使用已安装的GLEW库和glfw3(3.0.3)的测试程序

#include <GL/glew.h> 
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "Hello World", NULL,
NULL);
glfwMakeContextCurrent(window);
glewInit();
glfwTerminate();
}


编译:

g++ -o "Basic" "main.cpp" -lglfw3 -lGLEW -lGL -lX11 -lrt -lXxf86vm -lXrandr


在运行./Basic之前,我已设置

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64


(否则,它找不到位于/ usr / lib64中的GLEW库)

该程序给出了分段错误。如果我通过eclipse或使用gdb来运行程序,则堆栈跟踪为:

Thread [1] 16728 [core: 2] (Suspended : Signal : SIGSEGV:Segmentation fault)    
0x7ffff65e5ca0
__driCreateNewScreen_20050727() at 0x7ffff3de52f6
0x7ffff7645c92
glXQueryVersion() at 0x7ffff763d0aa
_glfwInitContextAPI() at 0x40c580
_glfwPlatformInit() at 0x408855
glfwInit() at 0x404829
main() at main.cpp:7 0x403819


使用gdb提供回溯

#0  0x00007ffff65e5ca0 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff3de52f6 in __driCreateNewScreen_20050727 () from /usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
#2 0x00007ffff7980c92 in ?? () from /usr/lib64/libGL.so.1
#3 0x00007ffff79780aa in glXQueryVersion () from /usr/lib64/libGL.so.1
#4 0x000000000040c580 in _glfwInitContextAPI ()
#5 0x0000000000408855 in _glfwPlatformInit ()
#6 0x0000000000404829 in glfwInit ()
#7 0x0000000000403819 in main ()


如果不使用GLEW库,而使用源代码(glew.h和glew.c),则程序可以运行。为此,我将第一个include更改为

#include <glew.h>


这次链接时,我使用库Xi(-lXi)。用于编译和链接程序的g ++命令为:

g++ -I"./" -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "main.cpp"
g++ -I"./" -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"glew.d" -MT"glew.d" -o "glew.o" "glew.c"
g++ -o Basic ./glew.o ./main.o -lGL -lX11 -lXrandr -lXxf86vm -lrt -lglfw3 -lXi


在运行./Basic之前,我已设置

export LD_LIBRARY_PATH=/usr/local/lib


(否则我会遇到细分错误,因为它试图使用已安装的GLEW lib)
该程序不会引发分段错误。该程序还使用eclipse运行。



调用glGetProgramInterfaceiv时的详细信息(程序,GL_PROGRAM_OUTPUT,GL_ACTIVE_RESOURCES和&outputs);

在上面的测试程序中,我添加了代码以加载顶点和片段着色器。我将着色器编译为程序。所有这一切。调用glGetShaderInfoLog可以工作并打印日志。当我添加一行代码来调用glGetProgramInterfaceiv时,程序给出了分段错误。使用glewExperimental = GL_TRUE;没有帮助。

使用gdb时,我无法获得良好的堆栈跟踪。这就是gdb所提供的:

(gdb) backtrace
#0 0x0000000000000000 in ?? ()
#1 0x000000000042ec18 in main () at ../main.cpp:54




操作系统详细信息:


Linux:3.2.0-4-amd64
发行版:Debian 7.3 Wheezy
使用者名称-m:x86_64
/ proc / cpuinfo->标志参数-> lm值存在


编译器详细信息


g ++ --version:g ++(Debian 4.7.2-5)4.7.2


OpenGL详细信息:


OpenGL提供程序:Advanced Micro Devices(来自AMD Catalyst Control Center)
OpenGL渲染器:AMD Radeon HD 7600M系列(来自AMD Catalyst Control Center)
OpenGL版本:4.2.11762兼容性配置文件上下文(来自AMD Catalyst Control Center)
glxinfo:
服务器glx版本字符串:1.4
客户端glx版本字符串:1.4
GLX版本:1.4
OpenGL版本字符串:4.2.11762兼容性配置文件上下文
OpenGL着色语言版本字符串:4.20
服务器glx供应商字符串:ATI
客户端glx供应商字符串:ATI


测试程序中使用的库的详细信息
 --lglfw /usr/local/lib/libglfw3.a 3.0.3


-lGL我的系统上有2个libGL.so.1.2-> /usr/lib64/fglrx/fglrx-libGL.so.1.2和libGL.so.1.2-> / usr / lib / i386-linux-gnu / fglrx / fglrx-libGL.so.1.2
-lX11 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
-lrt /usr/lib/x86_64-linux-gnu/librt.so-> /lib/x86_64-linux-gnu/librt.so.1-> /lib/x86_64-linux-gnu/librt.so.1-> /lib/x86_64-linux-gnu/librt-2.13.so
-lXrandr /usr/lib/x86_64-linux-gnu/libXrandr.so.2-> libXrandr.so.2.2.0
-lXxf86vm /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1-> libXxf86vm.so.1.0.0
-lXi /usr/lib/x86_64-linux-gnu/libXi.so.6-> libXi.so.6.1.0

最佳答案

我的直觉:原因是纯64位库和32位库之间的混淆。

关于:分段错误

如果


将libGLEW移出/ usr / lib64(例如移至/ tmp文件夹),然后
然后例如导出LD_LIBRARY_PATH = / tmp(而不是导出LD_LIBRARY_PATH = / usr / lib64)


然后分割错误消失(测试程序运行,glewinfo和visualinfo工作)

/ usr / lib64中的某些原因导致了问题。

我碰到了该页面AMD 13.1 64 bit drivers and the libGL.so.1 error,该页面解释了AMD安装程序将libGL.so文件放置在何处


  安装程序会将lib文件放在/ usr / lib64中。但是,如果有Ubuntu,则64位库位于/ usr / lib中。我做了以下事情来解决我的问题。
  
  卸载驱动程序
  须藤./amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.run --uninstall
  
  删除/ usr / lib64文件夹
  须藤rm -Rf / usr / lib64
  
  创建一个指向/ lib / usr的符号链接/ usr / lib64
  须藤ln -s / usr / lib / usr / lib64
  
  重新安装驱动程序
  须藤./amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.run --force
  
  重启
  须藤重启


我不确定该符号链接是否是个好主意...



关于:glGetProgramInterfaceiv (GLAPI/glGetProgramInterface)

失败,因为它仅可用于OpenGL> = 4.3。我的卡是4.2。运行glewinfo还显示以下内容:

GL_ARB_program_interface_query:                                MISSING 
-------------------------------
glGetProgramInterfaceiv: MISSING
glGetProgramResourceIndex: MISSING
glGetProgramResourceLocation: MISSING
glGetProgramResourceLocationIndex: MISSING
glGetProgramResourceName: MISSING
glGetProgramResourceiv: MISSING

关于c++ - GLEW 1.10.0段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823888/

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