我将应用程序移植到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。
我正在静态链接。
由于
答案 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。