D4X 的 lod.cc 错误的解决方法

D4X 是一款 Linux 平台下的下载软件,类似于 FlashGet。不过如果你尝试在 wxGTK 版本高于 2.4 的系统上编译安装 D4X 的话,将会有如下的错误:


lod.cc:178: error: ’struct _GtkCellRendererProgress’ has no member named ‘percent’
lod.cc:181: error: ’struct _GtkCellRendererProgress’ has no member named ‘dwn’
lod.cc:198: error: ’struct _GtkCellRendererProgress’ has no member named ‘percent’
lod.cc:226: error: ’struct _GtkCellRendererProgress’ has no member named ‘dwn’

原因在于本来在 wxGTK 中没有 GtkCellRendererProgress,所以 D4X 作者就自己实现了这个方法,但是到了 wxGTK>2.4 的版本后,wxGTK 自带了 GtkCellRendererProgress 方法。这就导致了在编译 D4X 的时候产生了冲突。修改 D4X 中和 wxGTK 有冲突的命名即可正常编译。修改方法如下:


— d4x-2.5.0final.org/main/face/lod.cc
+++ d4x-2.5.0final.new/main/face/lod.cc
@@ -126,21 +126,20 @@
};

-struct GtkCellRendererProgress{
+struct GtkCellRendererProgressD4X{
GtkCellRenderer parent;
gfloat percent;
tDownload *dwn;
};

-struct GtkCellRendererProgressClass{
+struct GtkCellRendererProgressD4XClass{
GtkCellRendererClass parent_class;
};

-GtkType gtk_cell_renderer_progress_get_type (void);
-GtkCellRenderer *gtk_cell_renderer_progress_new (void);
+//GtkType gtk_cell_renderer_progress_get_type (void);
+//GtkCellRenderer *gtk_cell_renderer_progress_new (void);

-static void gtk_cell_renderer_progress_init (GtkCellRendererProgress *cellpixbuf){
+static void gtk_cell_renderer_progress_init (GtkCellRendererProgressD4X *cellpixbuf){
};

// …

@@ -172,7 +171,7 @@
guint param_id,
const GValue *value,
GParamSpec *pspec){

- GtkCellRendererProgress *renderer = (GtkCellRendererProgress *)object;
+ GtkCellRendererProgressD4X *renderer = (GtkCellRendererProgressD4X *)object;

switch (param_id){
case 1:
renderer->percent=g_value_get_float(value);

// …

@@ -195,7 +194,7 @@
GdkRectangle *expose_area,
GtkCellRendererState flags){
char tmpc[100];
- float p=((GtkCellRendererProgress*)cell)->percent;
+ float p=((GtkCellRendererProgressD4X*)cell)->percent;

if (p>99.0 && p<100.0)
sprintf(tmpc,"%.1f",p);

// ...

@@ -223,7 +222,7 @@
switch (CFG.PROGRESS_MODE){
case 2:{
if (p<=0) break;

- tDownload *temp=((GtkCellRendererProgress*)cell)->dwn;;
+ tDownload *temp=((GtkCellRendererProgressD4X*)cell)->dwn;;

if (temp && temp->segments && temp->finfo.size>0){
temp->segments->lock_public();
tSegment *tmp=temp->segments->get_first();

// …

@@ -271,7 +270,7 @@
};

-static void gtk_cell_renderer_progress_class_init (GtkCellRendererProgressClass *klass){
+static void gtk_cell_renderer_progress_class_init (GtkCellRendererProgressD4XClass *klass){
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass);

@@ -300,19 +299,19 @@
{
static const GTypeInfo cell_progress_info =
{
- sizeof (GtkCellRendererProgressClass),
+ sizeof (GtkCellRendererProgressD4XClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gtk_cell_renderer_progress_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
- sizeof (GtkCellRendererProgress),
+ sizeof (GtkCellRendererProgressD4X),
0, /* n_preallocs */
(GInstanceInitFunc) gtk_cell_renderer_progress_init,
};

cell_progress_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
- “GtkCellRendererProgress”,
+ “GtkCellRendererProgressD4X”,
&cell_progress_info,
GTypeFlags(0));
}



Leave a Comment

(required)

(required)

Formatting Your Comment

The following XHTML tags are available for use:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

URLs are automatically converted to hyperlinks.