Wt是一个C++工具包,用于写网页,更具体的介绍可以看官网:http://www.webtoolkit.eu/wt/
由于我目前仍然是个linux新手,所以是经过一番波折后才将wt安装正确,官网上的wiki不知道是多少年前的,好久没更新过了,基本都不能用。主要参考了以下链接:http://blog.chinaunix.net/uid-26988130-id-3421761.html,十分感谢原博主。
首先,在Beaglebone上安装前需要先查看板子上的glic的版本(/lib目录下面,查看任意一个与glibc有关的文件的名字就可以),至少是v1.15,不然不能运行Wt. 如果不是,可以去 http://downloads.angstrom-distribution.org/demo/beaglebone/ 上下载,页面里也有安装步骤。这点没有在任何技术文档中有提到,但在我安装完成Wt并开始运行他们的examples的时候,提示error才发现的,表示glibc版本不对。可以看出他们官网做的确实不用心,虽然有wt的详细介绍,但在嵌入式板子上的安装也就是给出了一些简单的建议,估计还是因为Wt没有很好的前景,一直发展不起来,想想也是,基于c++的,任何修改过都要重新编译一次,没有解释型语言的优势,而且从最后项目完成结果看,javascript就可以完胜Wt,而且还不要求glibc的版本,不需要更新Beaglebone的系统,这样可以避免其他驱动的更改。
在Beaglebone或者PC可以运行一个Wt的example前,需要安装如下程序:交叉编译链(cross compiler only for Beaglebone),cmake, boost libraries, Wt packages.
如果不了解为什么需要交叉编译,可以先查看以下链接:http://www.2cto.com/kf/201202/118261.html 需要注意,Beaglebone与PC上的wt使用的boost libraries参数是有区别的,所以需要分开编译。
0. 安装cross compiler:
0.1 选择打算使用的cross compiler,我使用的是gcc-arm-linux-gnueabi and g++-arm-linux-gnueabi
0.2 终端中分别输入:sudo apt-get install gcc-arm-linux-gnueabi andsudo apt-get install g++-arm-linux-gnueabi
0.3 检查版本以确定是否完成安装:arm-linux-gnueabi-gcc -v and arm-linux-gnueabi-g++ -v
1. 安装cmake:
1.1 下载cmake-2.8.9或者其他比2.6新的版本,网上有好多。
1.2 解压(我的当前目录是/home/dhlinux/):tar -zxvf cmake-2.8.9-Linux-i386.tar.gz
1.3 将cmake与linux链接:sudo ln -s /home/dhlinux/cmake-2.8.9-Linux-i386/bin/* /usr/bin/
1.4 检查版本确保正确安装:cmake --version
2. 安装boost c++ library:
2.1 从官网(www.boost.org)下载boost c++ library,选择版本1.53.0,这是目前的最新版,测试过可以用。
2.2 解压(我的当前目录是/home/dhlinux/):tar -zxvf boost_1_53_0.tar.gz
2.3 cd boost_1_53_0
2.4 为boost安装创建一个文件夹,便于以后删除:mkdir boost_for_Wt
2.5 使用prefix说明安装路径(./boost_for_Wt):./bootstrap.sh --prefix=./boost_for_Wt,接下来,如果是在PC上安装,则跳到2.7
2.6 修改文件project-config.jam:找到using gcc : 改为using gcc : arm : arm-linux-gnueabi-g++ ; (在:两边及;前都有空格)
2.7 直接使用./bjam install 进行安装,而不使用--with-libraries指定需要安装哪些libs,因为wt需要几乎所有的libs
2.8 在安装目录中查看这些libs:./boost_for_Wt/lib
3. 安装Wt
3.1 从官网(http://www.webtoolkit.eu/wt/download)下载wt-3.2.3,最新版3.3.0在Beaglebone上无法完成安装。
3.2 解压:tar -zxvf wt-3.2.3.tar.gz
3.3 cd wt-3.2.3
3.4 这里安装Wt时候,需要使用cmake。cmake软件可以根据操作系统的不同生成相应地文件,对于linux,cmake可以直接生成Makefile文件,具体原理另开文章记录。简单的就是cmake寻找目录下的CMakeLists.txt,根据这个txt中的配置生成Makefile文件。由于cmake的参数太多,可以创建一个shell的script(取名为install_opt.sh)存下来,方便运行。下面是为Beaglebone安装Wt的cmake shell文件(参照了chainunix的原博主的):
#!/bin/sh
cmake \
-DCMAKE_SYSTEM_NAME="Linux" \
-DCMAKE_SYSTEM_PROCESSOR="arm" \
-DCMAKE_C_COMPILER="/usr/bin/arm-linux-gnueabi-gcc" \
-DCMAKE_CXX_COMPILER="/usr/bin/arm-linux-gnueabi-g++" \
-DCMAKE_AR="/usr/bin/arm-linux-gnueabi-ar" \
-DCMAKE_RANLIB="/usr/bin/arm-linux-gnueabi-ranlib" \
-DCMAKE_PREFIX_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt" \
-DCMAKE_FIND_LIBRARY_PREFIXES="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DBoost_LIBRARY_DIRS="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_SYSTEM_LIBRARY_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_LIBRARY_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_INCLUDE_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/" \
-DCMAKE_BUILD_TYPE="MinSizeRel" \
-DBOOST_PREFIX="/home/dhlinux/boost_1_53_0/boost_for_Wt" \
-DCONNECTOR_HTTP="true" \
-DEXAMPLES_CONNECTOR="wthttp" \
./
下面是为PC安装Wt的shell文件:
#!/bin/sh
cmake \
-DCMAKE_PREFIX_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt" \
-DCMAKE_FIND_LIBRARY_PREFIXES="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DBoost_LIBRARY_DIRS="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_SYSTEM_LIBRARY_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_LIBRARY_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/lib" \
-DCMAKE_INCLUDE_PATH="/home/dhlinux/boost_1_53_0/boost_for_Wt/" \
-DBOOST_PREFIX="/home/dhlinux/boost_1_53_0/boost_for_Wt" \
-DCONNECTOR_HTTP="true" \
-DEXAMPLES_CONNECTOR="wthttp" \
./
并不是所有的命令都需要,但并没有错误,然后命令行输入:source install_opt.sh来完成生成Makefile工作。这里也可以另创建一个文件夹来放置wt安装后的文件,比如在当前的wt-3.2.3文件夹下面创建一个build文件夹,然后cd build,在这个build目录下存储上面的shell文件,但需要将文件的最后一行的./改为../以表示cmake需要的CMakeLists.txt在上一级目录中。./表示CMakeLists.txt在当前目录中。
3.5 make 进行wt的安装
3.6 这时在PC上的安装就结束了,但对于Beaglebone,在快结束的时候会出现一个与数据库有关的错误,比如undefined reference to 'dlclose' 没有关系,使用make -i忽略掉,然后就可以完成安装。可以在/src下面找到需要的wt库。
3.7 转到/example/hello,具体路径根据当前目录而定,再次make,生成hello.wt 文件,输入./hello.wt --docroot . --http-address 0.0.0.0 --http-port 8080 这时PC上就可以打开浏览器,输入网址0.0.0.0:8080即可查看结果(http-address与http-port可以任意更改),PC端任务结束。Beaglebone上不仅需要hello.wt,也需要相应地libs,需要把这些都复制到Beaglebone上面(下面的是在terminal 上输入,不是shell文件):
scp hello.wt [email protected]:/home/root
cd /home/dhlinux/wt-3.2.3/src/
scp libwt.so.3.2.3 libwt.so.34 [email protected]:/usr/lib
cd ./http
scp libwthttp.so.3.2.3 libwthttp.so.34 [email protected]:/usr/lib
cd /home/dhlinux/boost_1_53_0/boost_for_Wt/lib
scp libboost_date_time.so.1.53.0 libboost_filesystem.so.1.53.0 libboost_program_options.so.1.53.0 libboost_random.so.1.53.0 libboost_regex.so.1.53.0 libboost_signals.so.1.53.0 libboost_system.so.1.53.0 libboost_thread.so.1.53.0 [email protected]:/usr/lib
这时,进入Beaglebone:screen /dev/ttyUSB1 115200 然后输入root,没有password.
输入:./hello.wt --docroot . --http-address 192.168.7.2 --http-port 8080在Linux上打开浏览器输入192.168.7.2:8080即可查看结果。这里的http-address不能改成其他的,因为这相当于Beaglebone的默认网址。
End.