python setup.py install需要一个C库。如何添加?

时间:2014-02-18 11:36:37

标签: python numpy linker setuptools

我想要完成的事情

我尝试升级numpy

# pip install --upgrade numpy
...

/chaouche/build/numpy/numpy/numarray/_capi.c:198: undefined reference to `log10'

collect2: ld returned 1 exit status

error: Command "gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/numarray/_capi.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/numarray/_capi.so" failed with exit status 1

----------------------------------------
  Rolling back uninstall of numpy
  Replacing /usr/lib/python2.7/site-packages/numpy-1.6.1-py2.7.egg-info
Command /usr/bin/python -c "import setuptools;__file__='/home/chaouche/build/numpy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-lppaDW-record/install-record.txt failed with error code 1
Exception information:
Traceback (most recent call last):
...
InstallationError: Command /usr/bin/python -c "import setuptools;__file__='/home/chaouche/build/numpy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-lppaDW-record/install-record.txt failed with error code 1

问题是什么

我最终发现他们没有链接到数学库,其中定义了所有这些符号(log10,sqrt,sincos等)。我发现通过手动尝试使用-lm标志的gcc命令并且编译正常。

我的问题

为了添加这个-lm标志并正确安装numpy,我需要编辑哪些文件?

修改

root@karabeela /home/chaouche/build/numpy # python setup.py install
Running from numpy source directory.
non-existing path in 'numpy/distutils': 'site.cfg'
F2PY Version 2
...

gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/fft/fftpack_litemodule.o build/temp.linux-i686-2.7/numpy/fft/fftpack.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/fft/fftpack_lite.so
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `radfg':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:959: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `cffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1292: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rfftb1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1424: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1481: undefined reference to `sincos'
collect2: ld returned 1 exit status
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `radfg':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:959: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `cffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1292: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rfftb1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1424: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1481: undefined reference to `sincos'
collect2: ld returned 1 exit status
error: Command "gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/fft/fftpack_litemodule.o build/temp.linux-i686-2.7/numpy/fft/fftpack.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/fft/fftpack_lite.so" failed with exit status 1

编译命令失败,因为没有指向数学库的链接。这是证据:

没有-lm

root@karabeela /home/chaouche/build/numpy # gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/fft/fftpack_litemodule.o build/temp.linux-i686-2.7/numpy/fft/fftpack.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/fft/fftpack_lite.so
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `radfg':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:959: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `cffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1292: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rfftb1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1424: undefined reference to `sincos'
build/temp.linux-i686-2.7/numpy/fft/fftpack.o: In function `rffti1':
/home/chaouche/build/numpy/numpy/fft/fftpack.c:1481: undefined reference to `sincos'
collect2: ld returned 1 exit status

使用-lm

root@karabeela /home/chaouche/build/numpy # gcc -lm -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/fft/fftpack_litemodule.o build/temp.linux-i686-2.7/numpy/fft/fftpack.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/fft/fftpack_lite.so
root@karabeela /home/chaouche/build/numpy #

编辑2

更多行显示错误之前setup.py安装正在执行的操作:

running build_ext
customize UnixCCompiler
customize UnixCCompiler using build_ext
building 'numpy.linalg.lapack_lite' extension
compiling C sources
C compiler: gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables -DNDEBUG -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables -g -fPIC

compile options: '-Inumpy/core/include -Ibuild/src.linux-i686-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/src/npysort -Inumpy/core/include -I/usr/include/python2.7 -c'
gcc: numpy/linalg/lapack_lite/dlapack_lite.c
gcc: numpy/linalg/lapack_lite/blas_lite.c
gcc: numpy/linalg/lapack_lite/f2c_lite.c
gcc: numpy/linalg/lapack_lite/zlapack_lite.c
gcc: numpy/linalg/lapack_lite/python_xerbla.c
gcc: numpy/linalg/lapack_lite/dlamch.c
gcc: numpy/linalg/lapack_litemodule.c
gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/linalg/lapack_litemodule.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/python_xerbla.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/zlapack_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/dlapack_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/blas_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/dlamch.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/f2c_lite.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/linalg/lapack_lite.so
build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/zlapack_lite.o: In function `zlaed0_':
/home/chaouche/build/numpy/numpy/linalg/lapack_lite/zlapack_lite.c:9844: undefined reference to `log'
...
/home/chaouche/build/numpy/numpy/linalg/lapack_lite/zlapack_lite.c:20998: undefined reference to `sqrt'
/home/chaouche/build/numpy/numpy/linalg/lapack_lite/zlapack_lite.c:21041: undefined reference to `sqrt'
build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/zlapack_lite.o:/home/chaouche/build/numpy/numpy/linalg/lapack_lite/zlapack_lite.c:22216: more undefined references to `sqrt' follow
...
/home/chaouche/build/numpy/numpy/linalg/lapack_lite/f2c_lite.c:583: undefined reference to `sqrt'
/home/chaouche/build/numpy/numpy/linalg/lapack_lite/f2c_lite.c:578: undefined reference to `sqrt'
collect2: ld returned 1 exit status
error: Command "gcc -pthread -shared -Wl,--as-needed -Wl,--no-undefined -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags build/temp.linux-i686-2.7/numpy/linalg/lapack_litemodule.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/python_xerbla.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/zlapack_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/dlapack_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/blas_lite.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/dlamch.o build/temp.linux-i686-2.7/numpy/linalg/lapack_lite/f2c_lite.o -L/usr/lib -Lbuild/temp.linux-i686-2.7 -lpython2.7 -o build/lib.linux-i686-2.7/numpy/linalg/lapack_lite.so" failed with exit status 1

编辑3

我在/numpy/core/setup.py:699

中找到了这段代码
config.add_extension('umath',
                     sources = umath_src +
                             [generate_config_h,
                             generate_numpyconfig_h,
                             generate_umath_c,
                             generate_ufunc_api],
                     depends = deps + umath_deps,
                     libraries = ['npymath'],
                     )

也许numarray与这个umath库而不是标准C数学库相关联?

root@karabeela /home/chaouche/build/numpy # find . -name "*umath*"
./numpy/linalg/umath_linalg.c.src
./numpy/core/code_generators/generate_umath.py
...
./build/lib.linux-i686-2.7/numpy/core/umath.so
./build/lib.linux-i686-2.7/numpy/core/umath_tests.so
./build/temp.linux-i686-2.7/numpy/core/src/umath
./build/temp.linux-i686-2.7/numpy/core/src/umath/umathmodule.o
./build/temp.linux-i686-2.7/build/src.linux-i686-2.7/numpy/core/src/umath
./build/temp.linux-i686-2.7/build/src.linux-i686-2.7/numpy/core/src/umath/umath_tests.o
...
root@karabeela /home/chaouche/build/numpy #

0 个答案:

没有答案