Opengl “glwMDrawingAreaWidgetClass';
我正在将一个应用程序移植到Linux上,它是在IRIX上编写的(几年前已成功移植到AIX)。我发现的一个问题是Linux不支持GLWMDrawingAreawigetClass(使用glwDrawaingAreaWidgeClass no'M')。所以我换了。我在Ubuntu 10.10上构建了这个应用程序。现在我尝试在14.04版本的基础上进行开发(也尝试在15.10版本上进行开发)。但是我得到了以下错误 glwMDrawingAreaWidgetClass的多个定义 我花了十几个文件才得到这个。事情是。。我没有用它 所以,以良好的调试风格,我问:发生了什么变化。makefile是相同的,文件是相同的。它必须是库或编译器(G++) 我到处找(谷歌搜索)来找到这个错误。我还没有找到解决办法(甚至问题) 有人注意到了吗?我怀疑这是图书馆的问题。Opengl “glwMDrawingAreaWidgetClass';,opengl,glx,Opengl,Glx,我正在将一个应用程序移植到Linux上,它是在IRIX上编写的(几年前已成功移植到AIX)。我发现的一个问题是Linux不支持GLWMDrawingAreawigetClass(使用glwDrawaingAreaWidgeClass no'M')。所以我换了。我在Ubuntu 10.10上构建了这个应用程序。现在我尝试在14.04版本的基础上进行开发(也尝试在15.10版本上进行开发)。但是我得到了以下错误 glwMDrawingAreaWidgetClass的多个定义 我花了十几个文件才得到这
我正在使用以下库链接: -lxvw-ldot-lmath-lXm-lXt-lX11-lglut-lGLU-lGL-lGLw-lm-lpthread 前三个是我的。我试着去除GLT,GLU,GL,GLw。 要么没有区别,要么我无法链接。我怀疑是GLw 我是静态链接
谢谢不久前从IRIX移植的一些代码也有同样的问题。它与RedHat 6的编译和链接非常好,但与RedHat 7的编译和链接不一样。据我所知,唯一相关的区别是RedHat 6使用GCC4.4,而RedHat 7使用GCC4.8 原因 变量
glwmDrawingAreawigetClass
在导入的每个对象文件中定义:
#include <Xm/Xm.h>
#include <GL/GLwMDrawA.h>
GLAPI在RHEL6中extern
,在mesa 3D之前。正如您所能看到的,GLAPI
是一个宏,在/usr/include/gl.h
中定义为\uu属性(可见性(“默认”))
修理
我不知道在glwMDrawingAreaWidgetClass
上这个更改是否正确,但是修改/usr/include/GL/GL.h
将GLAPI
的宏定义注释为\u属性((可见性(“默认”))
将允许文件中稍后的语句将其设置为extern。这使我的代码得以编译
#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
-# define GLAPI __attribute__((visibility("default")))
+// define GLAPI __attribute__((visibility("default")))
# define GLAPIENTRY
#endif /* WIN32 && !CYGWIN */
...
#ifndef GLAPI
#define GLAPI extern
#endif
额外的
我已经做了一个演示,用最少的代码来演示这个问题,只有两个对象文件。我已经给丹·尼科尔森发了电子邮件,希望他能比我更清楚地说明这个问题。你还有一个Ubuntu 10.10环境来编译它吗?您可以尝试在该设置和当前设置之间交换库,以查看其效果。这实际上是一个错误,还是只是一个警告?请引用完整的消息。这是一个错误,因为collect2/ld返回一个错误(请参见结尾)。这是消息的一部分-多次出现在XExec.o:In function
XCommandBox::~XCommandBox()':/c/viewer/src/XExec.c:83:glwMDrawingAreaWidgetClass'ViewerTestExec.o:/c/viewer/src/ViewerTestExec.c:43:首先在这里定义ViewerExec.o:In functionExecutor::initialize():/c/vps/libxvw.a(XWindow.o):In function
XWindow::XWindow(WindowManager&)“:/c/viewer/src/XWindow.c:57:对…集合的多个定义2:错误:ld返回1个退出状态我仅在一个文件中使用glwDrawAreaWidgetClass。我必须对这些库有所了解——因为它在ubuntu 10.10上构建时没有错误,而不是14.04或15.10(这两个版本都给了我相同的错误),很可能是新的编译器/链接器:它比旧的更严格。您应该创建一个完整的、最少的工作示例来说明问题。您好。我想我的问题也类似。我可以在较旧的linux平台(较旧的gcc)上编译应用程序,但不能在最新的平台(较新的gcc)上编译。我的“解决办法”(目前)是继续为这一特定应用程序使用较旧的平台。当我找到解决方案时,我会发布它。
#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
-# define GLAPI __attribute__((visibility("default")))
+// define GLAPI __attribute__((visibility("default")))
# define GLAPIENTRY
#endif /* WIN32 && !CYGWIN */
...
#ifndef GLAPI
#define GLAPI extern
#endif