首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的符号,尽管已在链接库中定义(CUDA 10.1)

未定义的符号,尽管已在链接库中定义(CUDA 10.1)
EN

Stack Overflow用户
提问于 2020-12-04 21:10:50
回答 1查看 564关注 0票数 1

我有一个库my_lib.so,它链接到几个CUDA10.1库,包括libnppicc.so

在库上运行ldd会输出以下所有依赖项,从而正确地解决这些依赖关系:

代码语言:javascript
复制
12:51:45 ~/ $ ldd my_lib.so
        linux-vdso.so.1 (0x00007fffc5183000)
        libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007f8bdbb00000)
        librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x00007f8bdbaf6000)
        libomp.so => /usr/lib/llvm-7/lib/libomp.so (0x00007f8bdba0d000)
        libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8bdb9ec000)
        libcudnn.so.7 => /usr/lib/x86_64-linux-gnu/libcudnn.so.7 (0x00007f8bc5100000)
        libdl.so.2 => /usr/lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8bc50f9000)
        libcudart.so.10.1 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudart.so.10.1 (0x00007f8bc4e33000)
        libcublas.so.10 => /usr/lib/x86_64-linux-gnu/libcublas.so.10 (0x00007f8bc1098000)
        libcufft.so.10 => /usr/local/cuda/lib64/libcufft.so.10 (0x00007f8bb2d34000)
        libcusolver.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcusolver.so.10 (0x00007f8ba8229000)
        libcurand.so.10 => /usr/local/cuda/lib64/libcurand.so.10 (0x00007f8ba32f9000)
        libnppicc.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppicc.so.10 (0x00007f8ba2cba000)
        libnppial.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppial.so.10 (0x00007f8ba1f67000)
        libnppist.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppist.so.10 (0x00007f8ba0b11000)
        libnppidei.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppidei.so.10 (0x00007f8ba0121000)
        libnppig.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppig.so.10 (0x00007f8b9e64f000)
        libnppitc.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppitc.so.10 (0x00007f8b9e165000)
        libnpps.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnpps.so.10 (0x00007f8b9d6de000)
        libnvToolsExt.so.1 => /usr/local/cuda/lib64/libnvToolsExt.so.1 (0x00007f8b9d4d5000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8b9d351000)
        libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007f8b9d1ce000)
        libmvec.so.1 => /usr/lib/x86_64-linux-gnu/libmvec.so.1 (0x00007f8b9d1a2000)
        libgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8b9d188000)
        libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f8b9cfc5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8c3990d000)
        libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f8b9cd57000)
        libcublasLt.so.10 => /usr/lib/x86_64-linux-gnu/libcublasLt.so.10 (0x00007f8b9aeb3000)
        libnppc.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppc.so.10 (0x00007f8b9ac38000)
        libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f8b9abf4000)
        libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x00007f8b9a9d6000)

接下来,我有一个python绑定库,它可以正确地链接到这个共享库lib_tf.so。当我试图运行一个导入python模块的简单python程序时,我会得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    import myLib
ImportError: /home/Jim/my_python_bindings_lib.cpython-37m-x86_64-linux-gnu.so: undefined symbol: nppiGammaInv_8u_C3IR

因此,我们得到了一个未定义的符号错误到nppiGammaInv_8u_C3IR。奇怪的是,这个符号是在被链接的libnppicc.so中定义的。

我们可以通过运行nm来确认这种情况。

代码语言:javascript
复制
12:51:53 ~/$ nm -D /usr/local/cuda-10.1/targets/x86_64-linux/lib/libnppicc.so.10 | gr
ep nppiGammaInv_8u_C3IR
0000000000090590 T nppiGammaInv_8u_C3IR
00000000000907b0 T nppiGammaInv_8u_C3IR_Ctx

当符号有定义时,我为什么要得到这个错误?奇怪的是,当我在安装了CUDA 10.1的其他机器上运行相同的测试脚本& libs时,它工作得很好。所以这台机器出了点问题,但我不知道是什么。我还在这台机器上安装了cuda 11.1,不确定这是否相关。

编辑

有人建议我也在python绑定库上运行ldd,如下所示:

代码语言:javascript
复制
09:49:10 ~/ $ ldd my_python_bindings_lib.cpython-37m-x86_64-linux-gnu.so
        linux-vdso.so.1 (0x00007ffd3f79c000)
        my_lib.so => /home/Jim/my_lib.so (0x00007f5a522f4000)
        libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f5a522c3000)
        libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5a522a2000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5a5211e000)
        libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007f5a51f9b000)
        libgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5a51f7f000)
        libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a51dbe000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5ab0bd0000)
        libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007f5a4fbda000)
        librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x00007f5a4fbd0000)
        libomp.so => /usr/lib/llvm-7/lib/libomp.so (0x00007f5a4fae7000)
        libcudnn.so.7 => /usr/lib/x86_64-linux-gnu/libcudnn.so.7 (0x00007f5a391fb000)
        libdl.so.2 => /usr/lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5a391f4000)
        libcudart.so.10.1 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudart.so.10.1 (0x00007f5a38f2e000)
        libcublas.so.10 => /usr/lib/x86_64-linux-gnu/libcublas.so.10 (0x00007f5a35193000)
        libcufft.so.10 => /usr/local/cuda/lib64/libcufft.so.10 (0x00007f5a26e2f000)
        libcusolver.so.10 => /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcusolver.so.10 (0x00007f5a1c324000)
        libcurand.so.10 => /usr/local/cuda/lib64/libcurand.so.10 (0x00007f5a173f2000)
        libnvToolsExt.so.1 => /usr/local/cuda/lib64/libnvToolsExt.so.1 (0x00007f5a171e9000)
        libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f5a16f7b000)
        libcublasLt.so.10 => /usr/lib/x86_64-linux-gnu/libcublasLt.so.10 (0x00007f5a150d7000)
        libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f5a15093000)
        libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x00007f5a14e75000)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-07 18:48:07

您正在导入一个Python模块,它依赖于my_python_bindings_lib.cpython-37m-x86_64-linux-gnu.so

那个图书馆:

  1. 有未解决的符号nppiGammaInv_8u_C3IR (在libnppicc中定义),
  2. 不依赖于定义符号的libnppicc.so.10

my_python_bindings_lib极有可能依赖于libnppicc (因为它使用了在那里定义的符号),并且添加该依赖将解决您的import问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65150791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档