`glwMDrawingAreaWidgetClass'的多重定义

时间:2016-04-12 01:31:37

标签: opengl glx

我将应用程序移植到Linux,在IRIX上编写(并成功移植到AIX(多年前))。我发现的一个问题是Linux上不支持glwMDrawingAreaWidgetClass(使用glwDrawaingAreaWidgeClass no' M')。所以我换了它。我在Ubuntu 10.10上构建了应用程序。现在我试图在14.04上构建(并且在15.10上尝试)。但是我收到以下错误。

glwMDrawingAreaWidgetClass的多重定义。

我得到了十几个(左右)文件。事情是......我没有使用它。

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

我到处寻找(谷歌搜索)以找到此错误。我还没有找到解决方案(甚至问题)。

有没有人注意到这个?我怀疑它是一个图书馆问题 我使用以下库链接:..

-lxvw -ldot -lmath -lXm -lXt -lXext -lX11 -lglut -lGLU -lGL -lGLw -lm -lpthread。

前三个是我的。我尝试去除过剩,GLU,GL,GLw。 要么没有区别,要么我无法联系。我怀疑它是GLw。

我正在静态链接。

由于

2 个答案:

答案 0 :(得分:1)

原因

在导入的每个目标文件中定义变量glwMDrawingAreaWidgetClass

#include <Xm/Xm.h>
#include <GL/GLwMDrawA.h>

是在/usr/include/GL/GLwDrawA.h

中定义的
GLAPI WidgetClass glwMDrawingAreaWidgetClass;

GLAPI在RHEL6中为extern,在this commit之前为mesa 3D。正如您see GLAPI __attribute__((visibility("default"))) __GCC__ > 4 /usr/include/gl.h一样,glwMDrawingAreaWidgetClass是一个定义为/usr/include/GL/gl.h的宏。

修复

我不知道GLAPI上的此更改是否正确,但修改__attribute__((visibility("default")))以将 #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 的宏定义注释为from (((`boite_archive` `ba` inner join `documents_scannes` `ds` on((`ds`.`num_boite` = `ba`.`num_boite`))) left join `clients` `cl` on((`ds`.`num_client` = `cl`.`num_client`))) left join `utilisateurs` `ut` on((`ds`.`id_operateur` = `ut`.`id_user`))) 将允许声明稍后在文件中将其设置为extern。这允许我的代码编译。

LEFT JOIN

附加

我已经用sample git repository来演示最小代码的问题,只有两个目标文件。我已经通过电子邮件向Dan Nicholson发送电子邮件,希望他能够更多地了解这个问题。

答案 1 :(得分:0)

我在前一段时间从IRIX移植的代码遇到了同样的问题。它编译和链接与RedHat 6很好,但不是7.据我所知,唯一相关的区别是RedHat 6使用gcc 4.4,而RedHat 7使用gcc 4.8。