Ubuntu安装fsl的一些问题————摘自网络
原文链接:http://blog.csdn.net/zhang_jinhe/article/details/49427749
昨天发现很重要的一个exec格式的二进制可执行程序”Map_refernce2brain”在我的Linux上不能正确执行:“cannot execute binary file: File format error”,直接把该exec可执行程序拖到shell中也是一样,于是乎百度,网上看到很多人说,这种现象两种可能,
- 权限不足(我就sudo -i , sudo chmod -R 777 xx.sh , sudo chmod +x xx.sh后执行,同样的错误,因此应该判定不是权限不足的原因)
- 系统架构和程序架构不同,“the architecture of your machine is different from the architecture of the binaries”
于是乎,
(1) use uname to check architecture of a machine, like typing “uname -mpio”, 显示我的电脑为“i686 athlon i686 GNU/Linux”
(2) use objdump to check architecture of the bianry file, like typing “objdump -a /bin/ls” 改成“objdump -a /home/zhjhe/…/Map_refernce2brain” , 显示该文件是“file format elf64-x86-64”,执行“file /home/zhj…/Map_..sh”也显示“elf 64-bit LSB executable x86-64”,总的来说意思就是该文件是64位的。。
然后看见网上有人说32位的系统不可能运行64位的程序,OMG,在用“get CONF_LONGBIT”检查linux系统是32位之后,我也彻底死心了。
没办法现在我不可能拿到源代码在我的机器上重新编译一下,只能在64位的linux环境中才可能运行改程序。我昨天装的linux-i386 (32位)+VTK+FSL+openGL全部废掉了,OMG+DAMN IT!
所以今天果断下了个“ubuntu-14.04-desktop-amd64.iso”,网上没看见有人说能不能在一台电脑上同时装32位和64位的ubuntu,不过管不了这么多了。也没有备份数据,然后直接还是用wubi.exe来安装到D盘。结果我的32位linux没了。。,不过还好64位linux安装好了,说实话可能是我下的iso不够新,然后我运行“sudo apt-get install cmake”都说找不到链接,真是醉了,后来不知道是怎么搞的,可能是先“sudo apt-get update”(更新软件源),”sudo apt-get upgrade“(从软件源更新软件,非必需,执行的好慢~),之后就可安装cmake 和 cmake-gui 了。
安装FSL
步骤一:
弄完之后,以为完事大吉了,BUT, there is always a ‘but’ and here is the but:
在shell中输入fslview可以调出gui界面,但是输入fsl却不行!
本以为装上fsl就可以运行我的sh文件,
ERROR:: Enviroment variable FSLOUTPUTTYPE is not set!”please make sure that the appropriate configuration file is sourced by your shell (e.g. by putting it in .profile)
于是乎,就在网上百度之,说是环境变量未设置,我把环境变量输出了一下,看看到底有没有东西:
echo $HOME 输出为: /home/zhjhe64bit
echo $FSLOUTPUTTYPE 输出为空 ↑↑(见上图)
也就是说FSLOUTPUTTYPE环境变量的确没有定义。
我就回看fslwiki网站上是不是有我忽略的步骤:↓↓
http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation/
其是该图片导致了一个意想不到的后果,后面会再说。↑↑
上图解决不了问题,于是乎又去尝试:
如sudo apt-get fsl-5.0
还是不行。
按照fslwiki的说法,当我装好之后,在shell中输入echo $FSLDIR之后应该输出,
↑点开上图的标为2的红色圈圈框出的连接,有下面↓
Neurodebian site - http://neuro.debian.net/pkgs/fsl-complete.html 是我下载Neurodebian版本FSL的网址连接,
should read their setup instructions:
http://neuro.debian.net/debian/extracts/fsl/README.Debian
从红色的标志看出,也就是说我的NeuroDebian–FSL 5.0版本的所有环境变量(FSLDIR,FSLOUTPUTTYPE, ….)的配置(configuration) 都在/etc/fsl/5.0/fsl.sh文件中实现的。于是乎我打开了它瞅瞅:
sudo gedit /etc/fsl/5.0/fsl.sh
发现确实是这样,里面很多给环境变量赋值的语句,比如:
FSLDIR = /usr/share/fsl/5.0
FSLOUTPUTTYPE = NIFTI_GZ
……..
①
然后我以为“please source the configuration script from /etc/fsl/5.0/fsl.sh”就好了,
然后我就在map2ref.sh文件中添加了一行:
source /etc/fsl/5.0/fsl.sh
bingo,问题解决了。
但是问题还是有,因为只是在单个文件中给这些变量赋值,但是没有在系统中定义这些环境变量,因此,在shell中查看:
echo $FSLDIR
echo $FSLOUTPUTTYPE
都是空的!
②
然后LL提示我linux多用户的话还要在:
http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation/ShellSetup
中进行一些设置,配置环境变量。
主要是为了多个用户能够一次性设置FSLDIR等环境变量,共享。
我的第一条语句需要改成FSLDIR=/usr/share/fsl/5.0
↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 之后我在shell输入“fsl”就能调出FSL的gui 了 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
但是执行map2ref2.sh依然显示“FSLOUTPUTTYPE找不到”
③
后来在
看起来挺靠谱的:于是话我就想把 . /etc/fsl/5.0/fsl.sh添加到profile文件中去。
先是sudo gedit /etc/profile修改保存之后会出现很多的warning,然后在网上搜了一下说是先sudo apt-get install gksu,然后再gksu gedit /etc/profile 打开该文件。
再profile文件中最下面添加一行:
. /etc/fsl/5.0/fsl.sh(注意. /之间有个空格)
说是注销下就好了。(按照我的理解就是系统登录时系统会调用profile文件完成对很多环境变量的配置!)
理论上注销之后,就能在登录时配置这些环境变量了,不用再往map2ref2.sh文件中添加:source /etc/fsl/5.0/fsl.sh 语句了
下面就是喜讯了:
成功了yeah!
map2ref.sh可以直接执行了!!!!!!!!
但是还有一个函数OverlaySlicer2.sh,
其中需要调用两个函数:over 和 slicer
我怀疑是 sh文件中有这么一句才能找到这两个函数:
cd /usr/local/fsl/bin
因为fsl其他版本的FSLDIR(或说安装路径)是/usr/local/fsl,因此我也在我的安装路径下找这两个可执行函数,在/usr/share/fsl/5.0/bin中找到了它们,然后我就:
cd /usr/share/fsl/5.0/bin
source /usr/share/fsl/5.0/bin
觉得有用的都添加上去了!
不过还是说没有权限执行,然后我就用
chmod +x over
chmod +x ……..来赋予调用权限
就好了!!!
还有一个问题就是我在root用户模式
sudo -i
后执行map2ref2.sh输出不是nii.gz文件而是.hdr和.img格式文件。
但是在zhjhe64bit用户下执行map2ref2.sh输出是nii.gz文件。
我怀疑是FSLOUTPUTTYPE环境变量在两种用户模式下是不同的
果然是这样:↓↓↓↓↓↓
想着是上面的设置出了错:↓↓↓↓↓↓
然后想着删除创建的.fslconf文件夹及其目录下文件:↓↓↓↓↓↓
然后就把root模式下和zhjhe64bit模式下的环境变量统一了:↓↓↓↓↓↓
相关:
rm -rf 指令比rmdir删除方式更强硬一些!!
总结一下:
/usr/share/fsl/5.0 是我的FSL安装路径, $FSLDIR应该指向它
/etc/fsl/5.0/fsl.sh 是我的FSL环境变量配置文件,FSLDIR, FSLOUTPUTTYPE等环境变量在这里被赋值

浙公网安备 33010602011771号