我装的是双系统,ubuntu 18.04 ,这个区别应该没什么问题
这是我的路径 F:\SRF\urlearning\....
PS:整个过程中,要是提示权限不够,就输入命令 sudo -s
再输入密码(密码不会显示位数),输完直接回车,就是root了
目录
一、软件环境
二、编译 urlearning
三、开始跑数据
Disclaimer:本文档解决的是刘老师发给你们的 urlearning 源代码成功编译的方法,也就是直接
make 的那个版本的源代码如何成功编译,这个要注意,别搞混了。另外,像 codeblocks 这样的 IDE,我基本不用,一直都是命令行裸奔,所以关于 cb 中 gcc、boost 还是其他报错,别找我,找我也不会,百度去。本文档中的所有内容,都是在命令行中完成。
--gy
软件环境
确保使用的是 gcc-4.8.5 和 g++-4.8.5,以及 boost 1.58.0
使用命令 gcc --version 和 g++ --version 查看版本
4.8.5 版本的安装:
sudo apt-get install -y gcc-4.8 g++-4.8
注:因为我之前试了 gcc-7.3 的高版本编译 boost 而没有成功,导致现在系统里面有多个版本的 gcc,所以现在要指定 gcc 版本为 4.8(各位要改的就是第三条命令中的
/usr/bin/gcc-7 ,自己用命令:
ls /usr/bin
看下都有啥高版本的 gcc,然后对应修改我下面三条命令中的“gcc-7”):
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
我之前boost装好后在urlearning下make,一直报错。是因为gcc版本高,高版本的gcc编译后的boost不行。
所以第一步就是装低版本的gcc,然后调整默认用的gcc版本(优先级)
卸载高版本 gcc 编译后的 boost(因为你现在要用 4.8.5 重新编译 boost):
进入/usr/lib 中使用命令
rm `ls | grep "boost"`
用这个卸载旧的boost
注:这里命令中的两个`是 shell 命令语法,意思是把 ls | grep "boost"的输出交给 rm 命令去删除
接着进入/usr/include 中,使用命令
rm -rf boost
接着回到之前下载 boost 压缩包的文件夹,下载旧版本的 boost 1.58.0:
使用命令:
wget https://jaist.dl.sourceforge.net/project/boost/boost/1.58.0/boost_1_58_0.tar.bz2
tar --bzip2 -xvf boost_1_58_0.tar.bz2
cd boost_1_58_0
./bootstrap.sh --with-libraries=all --with-toolset=gcc
./b2 toolset=gcc
./b2 install --prefix=/usr
Ldconfig
怎么看自己默认的gcc版本和boost对不对呢?
把下面这段代码保存在一个test.cpp文件中,搞一个新的单独的文件夹保存这个cpp文件,然后用命令g++ test.cpp -o test编译它,然后使用./test运行
#include
#include
#include
int main()
{
std::cout << "Boost version: "
<< BOOST_VERSION / 100000
<< "."
<< BOOST_VERSION / 100 % 1000
<< "."
<< BOOST_VERSION % 100
<< std::endl;
return 0;
}
使用命令 gcc --version 和 g++ --version 查看版本
---------------------------------分界线---------------------------------------
1
使用make命令可以运行urlearning下的Makefile文件,新生成了两个文件夹build和dist。具体操作:
右键选中 urlearning 文件,选择在终端打开,在终端中输入make命令
可能会提示需要安装make什么的,跟提示安装就好
sudo apt install make
sudo apt install make-guile
后发现project中多了build和dist两个文件夹
2
打开build和dist的内容发现build中是编译后读中间文件(.o),dist里有一个可执行文件。
build中经过编译后读中间文件(.o)
dist中的可执行文件
3
在dist的上一级目录GNU-Linux-x86中右键选择在终端打开,输入./astar-debug即可运行该可执行程序。
运行可执行文件astar-debug
4
仔细阅读后,发现运行该文件必须要有一个参数,后缀名为.pss的文件。可以从https://bitbucket.org/bmmalone/urlearningcpp/src找到pss文件。我们把其中一个Heart.csv.bic.pss文件放到和astar-debug同一个文件夹下。
按第3步执行的命令,添加参数,输入 ./astar-debug Heart.csv.bic.pss -n network.net命令:
此时发现GNU-linux-86下多了一个network.net文件
建议:
有必要把论文读一遍,清楚做的相关工作。重点了解.pss文件如何生成
可以先阅读makefile内容从而清楚编译过程,然后再详细的读代码,可能比较重要读代码:
以上找到对应读cpp代码。
可以通过阅读https://www.cnblogs.com/mfryf/p/3305778.html了解有关Makefile的内容,从而读懂Makefile文件
---------------------------------分界线---------------------------------------
然后是果杨学长后面的软链接设置,在我的电脑上遇到了问题,后来调整好了
注:在编译结束后,dist 文件夹中搜搜搜搜到 astar_debug 后,可以建立软连接实现到
处都可调用的功能。进入 urlearning 中的 dist/Debug_astar/GNU-Linux-x86 中用命令
ln -s $PWD/astar-debug /usr/local/bin/astar
在/usr/local/bin/中建立了一个软链接(软连接和硬连接后面操作系统和 Linux 编程会学)。
这样你就不需要每次都跑到 Debug_astar 文件夹中,使用./astar_debug 来调用 astar了,直接在任意路径下命令行输入 astar,就可以使用 A*算法。
我是把pss文件夹复制到urlearning里,然后从pss里打开终端,
再用astar XXX...执行
例如:astar Hepatitis.csv.bic.pss -n Hepatitis.net
如果有错误的话:
首先
rm /usr/local/bin/astar
然后直接
ln -s /home/urlearning/dist/Debug_astar/GNU-Linux-x86/astar-debug /usr/local/bin/astar
注意这里前一部分的路径/home/urlearning要改成你自己的urlearning的路径
或者,你命令行进入urlearning文件夹后,使用
ln -s $PWD/dist/Debug_astar/GNU-Linux-x86/astar-debug /usr/local/bin/astar
使用命令:
astar Hepatitis.csv.bic.pss -n Hepatitis.net
后缀为.net的就是最终的输出。