0

ここで作業中のクラスターに NumPy を構築する必要があります (ルート アクセス権がありません)。私は独自のバージョンの Python 2.7.3 (--enable-shared を使用) をコンパイルしましたが、root アクセス権がないため、Python は非標準の場所に置かれています。ただし、NumPy のコンパイルに問題があります。これは私が得るものです:

gfairchild@cj-fe1 ~/code/packages/src/numpy-1.6.2> export CFLAGS="-L/usr/projects/infmodels/gfairchild/packages/lib"
gfairchild@cj-fe1 ~/code/packages/src/numpy-1.6.2> python setup.py build --fcompiler=gnu95
...
...
...
compile options: '-Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/include -I/usr/projects/infmodels/gfairchild/packages/stow/Python-2.7.3/include/python2.7 -c'
gcc: _configtest.c
gcc -pthread _configtest.o -o _configtest
_configtest
failure.
removing: _configtest.c _configtest.o _configtest
building data_files sources
build_src: building npy-pkg config files
running build_py
copying numpy/version.py -> build/lib.linux-x86_64-2.7/numpy
copying build/src.linux-x86_64-2.7/numpy/__config__.py -> build/lib.linux-x86_64-2.7/numpy
copying build/src.linux-x86_64-2.7/numpy/distutils/__config__.py -> build/lib.linux-x86_64-2.7/numpy/distutils
running build_clib
customize UnixCCompiler
customize UnixCCompiler using build_clib
running build_ext
customize UnixCCompiler
customize UnixCCompiler using build_ext
customize Gnu95FCompiler
customize Gnu95FCompiler using build_ext
building 'numpy.linalg.lapack_lite' extension
compiling C sources
C compiler: gcc -pthread -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -L/usr/projects/infmodels/gfairchild/packages/lib -fPIC

compile options: '-DATLAS_INFO="\"3.6.0\"" -I/usr/include/atlas -Inumpy/core/include -Ibuild/src.linux-x86_64-2.7/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/include -I/usr/projects/infmodels/gfairchild/packages/stow/Python-2.7.3/include/python2.7 -Ibuild/src.linux-x86_64-2.7/numpy/core/src/multiarray -Ibuild/src.linux-x86_64-2.7/numpy/core/src/umath -c'
gcc: numpy/linalg/lapack_litemodule.c
gcc: numpy/linalg/python_xerbla.c
/usr/bin/gfortran -Wall -Wall -shared build/temp.linux-x86_64-2.7/numpy/linalg/lapack_litemodule.o build/temp.linux-x86_64-2.7/numpy/linalg/python_xerbla.o -L/usr/lib64/atlas -L. -Lbuild/temp.linux-x86_64-2.7 -llapack -lf77blas -lcblas -latlas -lpython2.7 -lgfortran -o build/lib.linux-x86_64-2.7/numpy/linalg/lapack_lite.so
/usr/bin/ld: cannot find -lpython2.7
collect2: ld returned 1 exit status
/usr/bin/ld: cannot find -lpython2.7collect2: ld returned 1 exit status
error: Command "/usr/bin/gfortran -Wall -Wall -shared build/temp.linux-x86_64-2.7/numpy/linalg/lapack_litemodule.o build/temp.linux-x86_64-2.7/numpy/linalg/python_xerbla.o -L/usr/lib64/atlas -L. -Lbuild/temp.linux-x86_64-2.7 -llapack -lf77blas -lcblas -latlas -lpython2.7 -lgfortran -o build/lib.linux-x86_64-2.7/numpy/linalg/lapack_lite.so" failed with exit status 1

libpython2.7.soで指定したディレクトリにあるのになぜか見つからないCFLAGS。ディレクトリを次の場所に追加しましたLD_LIBRARY_PATH

gfairchild@cj-fe1 ~/code/packages/lib> echo $LD_LIBRARY_PATH
/usr/projects/infmodels/gfairchild/packages/lib:/usr/projects/infmodels/ep_packages/db-4.3.28/lib:/usr/projects/infmodels/ep_packages/boost/lib:/usr/projects/infmodels/ep_packages/log4cpp/lib:/usr/projects/infmodels/gfairchild/packages/lib:/usr/projects/infmodels/ep_packages/db-4.3.28/lib:/usr/projects/infmodels/ep_packages/boost/lib:/usr/projects/infmodels/ep_packages/log4cpp/lib:/opt/OpenMPI/openmpi-1.4.3-gcc/lib64

これを機能させるにはどうすればよいですか?ありがとう!

4

2 に答える 2

2

修正しました!numpy-1.6.2ディレクトリを見ると、。というファイルが見つかりましたsite.cfg.example。内部を見ると、ライブラリを指定してディレクトリを含めることができることがわかりました。site.cfg内容が次のようなファイルを作成しただけです。

[DEFAULT]
library_dirs = /usr/projects/infmodels/gfairchild/packages/lib:/usr/local/lib
include_dirs = /usr/projects/infmodels/gfairchild/packages/include:/usr/local/include

構築が完了するまでにかかったのはそれだけでした。m01のソリューション(へのパスを追加LDFLAGS)は私をさらに前進させましたが、それでもエラーが発生しました。このsite.cfgファイルにより、ビルドが完了しました。

于 2012-11-27T22:55:03.700 に答える
1

-L/some/pathオプションをLDFLAGSではなくに入れる必要があると思いますCFLAGSCFLAGS[通常]コンパイラ、LDFLAGS[通常]リンカーに渡され、リンカーエラーが表示されます:)

ちなみに、この場合、エラーは Fortran コンパイラ エラーの直後に表示されます。-L同様にinを指定することもできFCFLAGSます (これは実際にはコンパイラではなく、リンカー フラグです。これは、本当にハックが必要な場合に備えてのことです)。

于 2012-11-27T22:46:13.937 に答える