【问题标题】:How to locate and display symbols when using /GL?使用 /GL 时如何定位和显示符号?
【发布时间】:2016-02-06 05:07:30
【问题描述】:

我们发现了一个链接器错误:

2>cryptlib.lib(x64dll.obj) : error LNK2001: unresolved external symbol "unsigned __int64 * CryptoPP::rdtable::Te" (?Te@rdtable@CryptoPP@@3PA_KA)
2>x64\Output\Debug\cryptest.exe : fatal error LNK1120: 1 unresolved externals

缺少的符号位于rijndael.cpp,它在x64dll.asm中的使用如所以:

include ksamd64.inc
EXTERNDEF ?Te@rdtable@CryptoPP@@3PA_KA:FAR
EXTERNDEF ?g_cacheLineSize@CryptoPP@@3IA:FAR
EXTERNDEF ?SHA256_K@CryptoPP@@3QBIB:FAR
...

源文件是用/GL编译的,所以我们不能用dumpbin /symbolsrijndael.obj 上检查目标文件以查看此配置发生了什么。另请参阅 Dumpbin 的 /SYMBOL 文档和 Why is DumpBin telling me there are no COMDATs in my binaries...?

Microsoft 的文档告诉我们不能使用什么,但没有告诉我们在这种情况下应该使用什么。

使用/GL编译时,我们如何在目标文件中定位和显示符号?

【问题讨论】:

    标签: visual-studio dumpbin


    【解决方案1】:

    如果您运行LINK /LIB /LTCG /OUT:output.lib rijndael.obj,它应该会生成一个包含实际编译代码的静态库。然后您可以运行dumpbin /ALL output.lib 来查看这些符号。 dumpbin /SYMBOLS output.lib 对我有用。

    您可能需要调整LINK 行以包含通常在链接时传递的其他标志。例如,/LIBPATH 条目等。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多