如何阅读 nm 命令: nm 选项 -T 和 -U(未定义)是什么意思?

Mad*_*ter 1 c++ linker gcc hpc nm

我怀疑来自“libsimint.a”的链接错误。

Linker messages (if any) follow...
/home/.../simint/lib/libsimint.a(shell.c.o): In function `simint_copy_shell':
shell.c:(.text+0x126): undefined reference to `__intel_ssse3_rep_memcpy'
/home/.../simint/lib/libsimint.a(shell.c.o): In function`simint_normalize_shells':
shell.c:(.text+0x4e3): undefined reference to `__svml_pow4'
Run Code Online (Sandbox Code Playgroud)

我尝试了 nm 命令来弄清楚:

>> nm libsimint.a |grep __intel_ssse3_rep_memcpy
U __intel_ssse3_rep_memcpy

>> nm libsimint.a |grep simint_copy_shell
0000000000000090 T simint_copy_shell
Run Code Online (Sandbox Code Playgroud)

根据我上面的理解(在 nm man 的帮助下),代码中提到了 simint_copy_shell 函数,但 __intel_ssse3_rep_memcpy 没有在我们的 libsimint 编译的其他一些库中定义。任何人都可以验证这一点或添加任何说明吗?谢谢

(我正在使用 gcc 编译和链接一个大代码,但它是用 icpc 编译的。)

Chr*_*odd 5

U 表示“未定义”——对象引用了符号但没有定义

T 表示在文本段中全局定义——对象定义并导出符号

手册页 ( man nm) 列出了所有这些类型代码。