【问题标题】:Unable to link to libgfortran.a [duplicate]无法链接到 libgfortran.a [重复]
【发布时间】:2014-06-26 09:57:09
【问题描述】:

我的系统上安装了 gfortran,文件 libgfortran.a 可以在 /usr/lib/gcc/x86_64-linux-gnu/4.6/ 找到。使用nm,我确保在其中定义了函数_gfortran_compare_string

$ nm /usr/lib/gcc/x86_64-linux-gnu/4.6/libgfortran.a | grep _gfortran_compare_string

返回

0000000000000000 T _gfortran_compare_string
0000000000000000 T _gfortran_compare_string_char4

但是,我的 CUDA-C 程序的链接器抛出错误:

/usr/local/cuda-6.0/bin/nvcc --cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/home/chung/lapack-3.5.0 -link -o  "pQP"  ./src/pQP.o   -lgfortran -llapacke -llapack -lcublas -lblas -lcurand
nvcc warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release.
/home/chung/lapack-3.5.0/liblapack.a(ilaenv.o): In function `ilaenv_':
ilaenv.f:(.text+0x81): undefined reference to `_gfortran_compare_string'

后来又出现另一个错误,再次与 libgfortran 相关:

/home/chung/lapack-3.5.0/liblapack.a(xerbla.o): In function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
xerbla.f:(.text+0x66): undefined reference to `_gfortran_transfer_character_write'
xerbla.f:(.text+0x76): undefined reference to `_gfortran_transfer_integer_write'
xerbla.f:(.text+0x7e): undefined reference to `_gfortran_st_write_done'
xerbla.f:(.text+0x87): undefined reference to `_gfortran_stop_string'

但是,再次使用 nm,我发现 _gfortran_st_write 等是在 libgfortran.a 中定义的。

链接:Complete logsource code

注意: Lapack 使用 libgfortran。我最近安装了 lapack 并运行了所有测试,它们都通过了。

【问题讨论】:

    标签: c cuda linker gfortran


    【解决方案1】:

    您需要更改为链接器指定静态库的顺序。如果你这样做:

    nvcc --cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 \
    -L/home/chung/lapack-3.5.0 -link -o  "pQP"  ./src/pQP.o  \ 
    -llapacke -llapack -lcublas -lblas -lcurand -lgfortran 
    

    您应该会发现它会起作用。

    根本原因(这是 gcc/gnu 工具链的一个特点,与 nvcc 无关)是 gnu 链接器从左到右解析静态库的链接依赖项列表。如果您指定静态库任何依赖它的库之前,它将被跳过,因为它在链接列表中没有依赖关系在第一次遇到它的处理点

    【讨论】:

    • 太棒了!太感谢了!我将永远感激不尽!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2019-07-12
    • 2019-10-18
    • 2016-12-24
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多