2

我一直在按照本教程在我的 jetson tk1 上本地安装 openacc,但我发现安装脚本不正确。我在编译 openacc 库时没有看到任何错误,但是当我尝试编译时,我收到一条错误消息

ubuntu@tegra-ubuntu:~/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
4

1 回答 1

1

有几个问题:

  • 您初始化了一个名为的数组,list但您尝试像这样迭代它的元素,for file in $list这只会迭代第一个元素,因为$list就像${list[0]}. 用于for file in "${list[@]}"迭代整个数组。
  • 不要忘记双引号你的扩展以防止GlobbingWordSplitting。例如name=$(basename $file .tar.gz)ortar zxvf $file将产生不需要的结果,以防变量的值file包含空格并且没有双引号(即$file,而不是正确的形式"$file":)
  • 我猜你错误地使用cd $basenamecd "$name"- 或其他东西,如果它没有意义的话。无论如何,该变量name似乎未使用。
  • 这条线[ "$file" == "*.tgz" ]可能是错误的。似乎作者正在尝试匹配"$file"glob模式。好吧,为了做到这一点,必须改变两件事: 1. 使用[[代替[,因为该命令[根本不支持全局匹配。2. 应删除 *.tgz 周围的双引号 - 否则,"$file"将与文字匹配*.tgz。所以总结 1 和 2,脚本应该使用[[ $file = *.tgz ]]而不是[ "$file" == "*.tgz" ]. 我鼓励您进一步阅读TestsAndConditionals并查看这个很棒的常见问题解答,它是本Bash 指南的一部分- 可能是学习 Bash 的最佳(如果不是唯一)来源之一。
  • 该脚本不检查是否cd成功退出,而只是继续。它可能会产生不想要的结果。cd || exit是首选,但将其修改为对用户具有描述性。
  • 关于变量ACCULLROOT: 按照惯例,环境变量 ( PATH, EDITOR, SHELL, ...) 和内部 shell 变量 ( BASH_VERSION, RANDOM, ...) 完全大写。所有其他变量名称应为小写。由于变量名区分大小写,因此此约定可避免意外覆盖环境变量和内部变量。
于 2016-01-31T04:01:56.867 回答