转自http://www.cnblogs.com/ylan2009/articles/2404238.html
里面提到的问题我全都遇到了,做个标记收藏了 哈哈。
Larbin编译步骤:
编译前准备:(红色是要替换的为你自己的)
1.确认是否已经安装了build-essential程序包:
: sudo apt-get install build-essential
2. 确认是否已经安装了内核头文件包:
:uname –r //查看内核名
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><?xml:namespace prefix = st1 /><?xml:namespace prefix = st1 /><?xml:namespace prefix = st1 />2.6.32-25-generic //我的显示结果
:sudo apt-get install linux-headers-'2.6.32-25-generic '
这里你要在单引号中换为你的内核名
3. 看一下gcc版本是否相匹配
:cat /proc/version
Linux version 2.6.32-25-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #44-Ubuntu SMP Fri Sep 17 20:26:08 UTC 2010
:/usr/bin/gcc
/usr/bin/gcc-4.4 /usr/bin/gccmakedep
可以看到,我的核心是用gcc version 4.4.3编译的, 已有了/usr/bin/gcc-4.4我这里可以。不相符要装内核。
:apt-get install gcc-4.4
开始编译:
1. tar zxvf larbin-2.6.3.tar.gz
2. ./configure //或许会有如下错误:
make[2]: Entering directory `/home/ifeitian/larbin-2.6.3/src/utils'
makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend
make[2]: *** [dep-in] Error 127
make[2]: Leaving directory `/home/ ifeitian/larbin-2.6.3/src/utils'
make[2]: Entering directory `/home/ ifeitian/larbin-2.6.3/src/interf'
makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend
make[2]: *** [dep-in] Error 127
make[2]: Leaving directory `/home/ ifeitian/larbin-2.6.3/src/interf'
make[2]: Entering directory `/home/ ifeitian/larbin-2.6.3/src/fetch'
makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend
make[2]: *** [dep-in] Error 127
make[2]: Leaving directory `/home/ ifeitian/larbin-2.6.3/src/fetch'
make[1]: *** [dep] Error 2
make[1]: Leaving directory `/home/ ifeitian/larbin-2.6.3/src'
make: *** [dep] Error 2
这是makedepend命令的问题,没有安装。
:sudo apt-get install xutils-dev //安装
3. make
这时会出现如下错误:
parse.c: In function ‘vbuf__append_quoted1035’:
parse.c:138: warning: pointer targets in passing argument 2 of ‘adns__vbuf_append’ differ in signedness
internal.h:331: note: expected ‘const byte *’ but argument is of type ‘char *’
parse.c:155: warning: pointer targets in passing argument 2 of ‘adns__vbuf_append’ differ in signedness
internal.h:331: note: expected ‘const byte *’ but argument is of type ‘char *’
make[1]: *** [parse.o]错误1
make[1]:正在离开目录`/home/ifeitian/larbin-2.6.3/adns'
make: *** [all]错误2
这里由于/larbin-2.6.3/adns下internal.h中第568—571行代码引起的。其中一个参数类型错误。
修改方法有两种如下:
1.可以直接将这几行代码注释掉。即将这几行第一的函数体注释掉。
2.修改其中的参数类型
adns文件夹下internal.h文件569-571
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, parsedomain_flags flags,
const byte *dgram, int dglen, int *cbyte_io, int max);
修改为:
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, adns_queryflags flags,
const byte *dgram, int dglen, int *cbyte_io, int max);即可。
继续make:make
这是有可能会出现如下错误:
make[1]:正在进入目录`/home/ifeitian/larbin-2.6.3/src'
for d in utils interf fetch; do (cd $d; make all); done
make[2]:正在进入目录`/home/ifeitian/larbin-2.6.3/src/utils'
make[2]: ***没有规则可以创建“string.o”需要的目标“../iostream.h”。停止。
make[2]:正在离开目录`/home/ifeitian/larbin-2.6.3/src/utils'
make[2]:正在进入目录`/home/ifeitian/larbin-2.6.3/src/interf'
make[2]: ***没有规则可以创建“input.o”需要的目标“../iostream.h”。停止。
make[2]:正在离开目录`/home/ifeitian/larbin-2.6.3/src/interf'
make[2]:正在进入目录`/home/ifeitian/larbin-2.6.3/src/fetch'
g++ -Wno-deprecated -Wall -O3 -D_REENTRANT -I- -I.. -Ihttp://www.cnblogs.com/adns -c -o sequencer.o sequencer.cc
cc1plus: note: obsolete option -I- used, please use -iquote instead
sequencer.cc:5:22: error: iostream.h:没有那个文件或目录
make[2]: *** [sequencer.o]错误1
make[2]:正在离开目录`/home/ifeitian/larbin-2.6.3/src/fetch'
make[1]: *** [subdirs-all]错误2
make[1]:正在离开目录`/home/ifeitian/larbin-2.6.3/src'
make: *** [all]错误2
这是由于在一些原文件中使用了include<iostream.h>在编译过程中没有发现。是C++及C编译中的问题。可以如下更改:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1. 将所有有错误的文件中的include<iostream.h>改为include<iostream>
并加上using namespace std; C++的形式嘛。不过这种该法相当费劲的。需要改很多个文件太麻烦了。
2.这个方法不错很简单易懂
到/usr/include/c++/下CP一份iostream文件到larbin的src目录下。并将其的名改为iostream.h.打开此文件添加一句using namespace std;
这就OK了。
继续make吧。会OK了。
4.运行
1.运行:./larbin
2.中止:Ctrl+C
3.重起:./larbin –scratch
5. 配置
修改了options.h 后再make又遇到了新问题
../fetch/file.h:105:24: error: extra qualification ‘html::’ on member ‘getLinks’
site.cc: In member function ‘void NamedSite::dnsOK()’:
用下面的方法解决的
http://blog.csdn.net/s030702614/article/details/5383615
./src/fetch/file.h中的第105行 inline Vector<char> *html::getLinks () { return &links; }改为inline Vector<char> *getLinks () { return &links; }