什么库把@@GLIBC_2.2.5放在

What library is puts@@GLIBC_2.2.5 in

我正在尝试静态 link mkl 到汇编代码中,具有以下内容:

ld -L/home/ziheng/intel/compilers_and_libraries/linux/mkl/lib/intel64 -L /home/ziheng/intel/compilers_and_libraries/linux/lib/intel64/ -lm -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_openmpi_ilp64 -liomp5 -lpthread -ldl bump.o

这表明我对以下内容有未定义的引用: puts@@GLIBC_2.2.5

有谁知道我缺少什么标志?

这个命令:

ld -L/home/ziheng/intel/compilers_and_libraries/linux/mkl/lib/intel64 -L /home/ziheng/intel/compilers_and_libraries/linux/lib/intel64/ -lm -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_openmpi_ilp64 -liomp5 -lpthread -ldl bump.o

在 GIBC 支持的每个平台上都是不正确的。

一般来说,用户级代码应该从不 link直接使用ld任何东西——总是使用适当的编译器驱动程序(可能gcc 这里)。

此外,在 link 行中将库放在目标文件之前对于大多数 unix link 用户来说会失败(至少对于存档库而言)。

正确的命令应该是这样的:

gcc bump.o \
    -L/home/ziheng/intel/compilers_and_libraries/linux/mkl/lib/intel64 \
    -L/home/ziheng/intel/compilers_and_libraries/linux/lib/intel64 \
    -lmkl_intel_lp64 -lmkl_blacs_openmpi_ilp64 -lmkl_intel_thread -lmkl_core \
    -liomp5 -lm -lpthread -ldl 

P.S.

What library is puts@@GLIBC_2.2.5 in

它在 libc.

P.P.S.

I am trying to statically link mkl

您的命令行中没有任何暗示静态 linking 的内容。您需要为此添加 -static