安裝 ubuntu-14.04-desktop-amd64.iso + FSL

昨天發現很重要的一個exec格式的二進制可執行程序”Map_refernce2brain”在我的linux上不能正確執行:“cannot execute binary file: File format error”,直接把該exec可執行程序拖到shell中也是一樣,於是乎百度,網上看到很多人說,這種現象兩種可能,

  1. 權限不足(我就sudo -i , sudo chmod -R 777 xx.sh , sudo chmod +x xx.sh後執行,同樣的錯誤,因此應該判定不是權限不足的原因)
  2. 系統架構和程序架構不同,“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模式下的環境變量統一了:↓↓↓↓↓↓
這裏寫圖片描述



相關:
這裏寫圖片描述
刪除root權限下創建的文件夾及其目錄下所有文件
rm -rf 指令比rmdir刪除方式更強硬一些!!

總結一下:
/usr/share/fsl/5.0 是我的FSL安裝路徑, $FSLDIR應該指向它
/etc/fsl/5.0/fsl.sh 是我的FSL環境變量配置文件,FSLDIR, FSLOUTPUTTYPE等環境變量在這裏被賦值
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章