2016-01-30 156 views
2

我一直在關注這個教程對我杰特森TK1本地安裝OpenACC的,我發現安裝腳本是不正確的。我沒有看到任何錯誤,當我編譯OpenACC的圖書館,但是當我試圖編譯我得到那個說bash腳本不安裝Python包正確

[email protected]:~/apps/acc/accull/yacf/examples/acc$ accull -v -o gpu.x acc_test.c 
**************************************** 
       _ _ _  _   
       | | | | | | |   
    __ _ ___ ___| | | | | | |   
/_` |/ __/ __| | | | | | |   
| (_| | (_| (__| |__| | |____| |____  
    \__,_|\___\___|\____/|______|______|  
**************************************** 
Release 0.4alpha 

* Verbose output 
* Output executable name gpu.x 
* Processing acc_test.c to ./accull_k3Ty8/acc_test.c 
* Building acc_test.c 
* Running StS translation 
Traceback (most recent call last): 
    File "/home/ubuntu/apps/acc/accull/yacf//bin/c2frangollo.py", line 64, in <module> 
    from Backends.Frangollo.Mutators.Common import FrangolloMutatorError 
    File "/home/ubuntu/apps/acc/accull/yacf/Backends/Frangollo/Mutators/Common.py", line 33, in <module> 
    from Backends.C99.Visitors.LlcFilters import AccScopeReverse, AccScopeFilter 
    File "/home/ubuntu/apps/acc/accull/yacf/Backends/C99/Visitors/LlcFilters.py", line 40, in <module> 
    from Tools.Tree import NodeNotFound 
    File "/home/ubuntu/apps/acc/accull/yacf/Tools/Tree.py", line 34, in <module> 
    c_ast = getCurrentLanguageAst() 
    File "/home/ubuntu/apps/acc/accull/yacf/Frontend/Shortcuts.py", line 40, in getCurrentLanguageAst 
    myclass = __import__(config.FRONTEND_MODULE + '.' + str(name) + "." + str(name).lower() + '_ast', globals(), locals(), [str(name),]) 
    File "/home/ubuntu/apps/acc/accull/yacf/Frontend/C99/__init__.py", line 16, in <module> 
    from .c99_parser import C99Parser 
    File "/home/ubuntu/apps/acc/accull/yacf/Frontend/C99/c99_parser.py", line 15, in <module> 
    import ply.yacc 
ImportError: No module named ply.yacc 
! Compilation of acc_test.c FAILED (no Project directory build) 
/usr/local/cuda/bin/nvcc -Xcompiler -fopenmp -lrt -lcuda -lOpenCL -lrt -lcuda -arch=sm_20 *.o /home/ubuntu/apps/acc/accull/frangollo/src/libfrangollo.a -o gpu.x 
nvlink fatal : Could not open input file '*.o' 
* Finished 

http://scelementary.com/2015/04/30/openacc-on-jetson-tk1.html

#!/bin/bash 

ACCULLROOT=/home/ubuntu/apps/acc 

mkdir -p $ACCULLROOT/source 
cd $ACCULLROOT/source 

wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz 
wget https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.3.1.tar.gz 
wget http://lxml.de/files/lxml-3.4.2.tgz 
wget http://www.dabeaz.com/ply/ply-3.4.tar.gz 
wget https://pypi.python.org/packages/source/M/Mako/Mako-1.0.1.tar.gz 

tar xvf Python-2.7.9.tar.xz 
cd Python-2.7.9/ 
./configure --prefix=$ACCULLROOT 
make -j2 
make install 

list=(Sphinx-1.3.1.tar.gz lxml-3.4.2.tgz ply-3.4.tar.gz Mako-1.0.1.tar.gz) 
for file in $list 
do 
    if [ "$file" == "*.tgz" ] 
    name=$(basename $file .tgz) 
    then 
    name=$(basename $file .tar.gz) 
    fi 

    tar zxvf $file 
    cd $basename 
    $ACCULLROOT/bin/python setup.py build 
    $ACCULLROOT/bin/python setup.py install 
    cd .. 

done 
+0

您可能需要運行該腳本作爲根/須藤。你也可以嘗試手動安裝'ply'。 'pip install ply' –

回答

1

有幾個問題的錯誤:

  • 您初始化稱爲list一個數組,但你嘗試迭代它的元素這樣for file in $list這隻會遍歷的第一要素,因爲$list就像${list[0]}。 使用for file in "${list[@]}"遍歷整個數組。
  • 不要忘了一倍引號的擴展,以防止GlobbingWordSplitting。 例如name=$(basename $file .tar.gz)tar zxvf $file將產生不想要的結果的情況下,該變量file的值包含的空格,沒有雙引號是左(即$file而不是正確的形式:"$file"
  • 你誤用我猜cd $basename而不是cd "$name" - 或其他東西,如果它沒有意義。無論如何,變量name似乎是未使用的。
  • 此行[ "$file" == "*.tgz" ]可能是錯誤的。看起來,作者試圖匹配"$file"glob模式。那麼,爲了做到這一點,兩件事情必須改變:1.使用[[代替[,因爲該命令[根本不支持水珠匹配。 2. * .tgz周圍的雙引號應該被刪除 - 否則,"$file"將與文字*.tgz匹配。因此,總結1和2,腳本應該使用[[ $file = *.tgz ]]而不是[ "$file" == "*.tgz" ]。我鼓勵你進一步閱讀關於TestsAndConditionals,並看到這個偉大的FAQ,這是Bash Guide的一部分 - 可能是最好的(如果不是唯一的)來源,學習Bash。
  • 該腳本不檢查cd是否成功退出,並且繼續。它可能會帶來不希望的結果。 cd || exit是首選,但將其修改爲對用戶具有描述性。
  • 關於變量ACCULLROOT:按照慣例,環境變量(PATHEDITORSHELL,...)和內部shell變量(BASH_VERSIONRANDOM,...)是完全資本化。所有其他變量名稱應該是小寫的。由於 變量名稱區分大小寫,因此此慣例避免意外覆蓋環境和內部變量。
+0

我之前沒有看到這個,我發現找到了openacc的替代方案,但是感謝您的詳細回覆! – Zypps987

+0

不客氣! –