Opengl “glwMDrawingAreaWidgetClass';

Opengl “glwMDrawingAreaWidgetClass';,opengl,glx,Opengl,Glx,我正在将一个应用程序移植到Linux上,它是在IRIX上编写的(几年前已成功移植到AIX)。我发现的一个问题是Linux不支持GLWMDrawingAreawigetClass(使用glwDrawaingAreaWidgeClass no'M')。所以我换了。我在Ubuntu 10.10上构建了这个应用程序。现在我尝试在14.04版本的基础上进行开发(也尝试在15.10版本上进行开发)。但是我得到了以下错误 glwMDrawingAreaWidgetClass的多个定义 我花了十几个文件才得到这

我正在将一个应用程序移植到Linux上,它是在IRIX上编写的(几年前已成功移植到AIX)。我发现的一个问题是Linux不支持GLWMDrawingAreawigetClass(使用glwDrawaingAreaWidgeClass no'M')。所以我换了。我在Ubuntu 10.10上构建了这个应用程序。现在我尝试在14.04版本的基础上进行开发(也尝试在15.10版本上进行开发)。但是我得到了以下错误

glwMDrawingAreaWidgetClass的多个定义

我花了十几个文件才得到这个。事情是。。我没有用它

所以,以良好的调试风格,我问:发生了什么变化。makefile是相同的,文件是相同的。它必须是库或编译器(G++)

我到处找(谷歌搜索)来找到这个错误。我还没有找到解决办法(甚至问题)

有人注意到了吗?我怀疑这是图书馆的问题。
我正在使用以下库链接:

-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 function
Executor::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