suse11.0下dke环境gcc4.3.1编译starditc

来源:互联网 发布:考研政治题库软件 编辑:程序博客网 时间:2024/05/19 08:43
材料是sf下的stardict的最新包stardict-3.0.1
download address: http://downloads.sourceforge.net/stardict/stardict-3.0.1.tar.bz2
首先configure  --disable-festival --disable-espeak(后面两个根据情况选,可以用./configure --help参考有什么选项。好像这两个包是有关音频的,估计装完之后不能发音了)

然后他哗啦哗啦一堆之后如果没有error就可以make了.

如果没有意外,第一个error会卡在src/libsigc++的目录下,
他说

g++ -DHAVE_CONFIG_H   -I../.. -I../../src -I../../src/sigc++config   -g -O2 -MT signal.o -MD -MP -MF .deps/signal.Tpo -c -o signal.o signal.cc
In file included from signal.cc:20:
../../src/sigc++/signal.h:1675: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> > sigc::signal0<T_return, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:1784: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> > sigc::signal1<T_return, T_arg1, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:1895: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> > sigc::signal2<T_return, T_arg1, T_arg2, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:2008: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, sigc::nil, sigc::nil, sigc::nil, sigc::nil> > sigc::signal3<T_return, T_arg1, T_arg2, T_arg3, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:2123: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, sigc::nil, sigc::nil, sigc::nil> > sigc::signal4<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, sigc::nil, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:2240: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, sigc::nil, sigc::nil> > sigc::signal5<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, sigc::nil, sigc::nil> >’
../../src/sigc++/signal.h:2359: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, sigc::nil> > sigc::signal6<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, sigc::nil> >’
../../src/sigc++/signal.h:2480: error: declaration of ‘typedef struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7> > sigc::signal7<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7, T_accumulator>::slot_list’
../../src/sigc++/signal.h:168: error: changes meaning of ‘slot_list’ from ‘struct sigc::slot_list<sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7> >’


这个是gcc4.3之后的bug或者应该这样说是gcc4.3优化了一些东西以至不支持sigc++的这个代码
换编译期很烦的,于是修改源码
在把src/sing++/signal.h第21行注释掉
//  #define SIGC_TYPEDEF_REDEFINE_ALLOWED 1

再make 再error,这回他说:
error: ‘auto_ptr’ is not a member of ‘std’
这个也是gcc4.3.1的bug,
只要在相应的cpp文件前面加上一句
#include <memory>
就应该能够度过此劫

之后会有一些什么像 error: 'strcmp' was not declared in this scope 之类的小逻逻级别的error
只要在相应的cpp加上下面两行的头文件就行了,
#include <string.h>
#include <stdlib.h>

安装这玩意还真费劲
手工加头文件贼多,是一件体力活
修改源代码更让人烦,哎呀,对哦,还是把改好的文件上传吧,免得日后在装又要烦死了。