简体   繁体   English

LLVM 链接错误:未解析的外部符号 crc32

[英]LLVM link error: unresolved external symbol crc32

When trying to compile and link a program with the LLVM libraries, I'm getting an error unresolved external symbol crc32 .尝试使用 LLVM 库编译和链接程序时,我收到错误unresolved external symbol crc32 The weird thing is that this didn't always happen;奇怪的是,这并不总是发生。 it just started the other day.前几天才开始。

OS:操作系统:

Microsoft Windows [Version 10.0.19044.1706]

Compiler:编译器:

Microsoft (R) C/C++ Optimizing Compiler Version 19.31.31104 for x64

LLVM version: https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-14.0.5.zip and also tried with the latest snapshot from github, same result in both cases. LLVM 版本: https ://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-14.0.5.zip 并尝试使用来自 github 的最新快照,两种情况下的结果相同。

LLVM build procedure: LLVM 构建过程:

cd \llvm-project
md build
cd build
"\Program Files\CMake\bin\cmake.exe" -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=1 ../llvm
cmake --build .

Test program:测试程序:

#include <llvm/IR/ValueSymbolTable.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/LinkAllPasses.h>
#include <llvm/Support/InitLLVM.h>
using namespace llvm;

int main(int argc, char **argv) {
  InitLLVM _(argc, argv);
  return 0;
}

Build:建造:

cl /IC:\llvm-project\llvm\include /IC:\llvm-project\build\include /MDd /Zi /w test.cpp C:\llvm-project\build\Debug\lib\*.lib

(Same result if I explicitly specify just the libraries that should be needed.) (如果我明确指定只需要的库,结果相同。)

Errors:错误:

LLVMSupport.lib(CRC.obj) : error LNK2019: unresolved external symbol crc32 referenced in function "unsigned int __cdecl llvm::crc32(unsigned int,class llvm::ArrayRef<unsigned char>)" (?crc32@llvm@@YAIIV?$ArrayRef@E@1@@Z)
LLVMSupport.lib(Compression.obj) : error LNK2001: unresolved external symbol crc32
  Hint on symbols that are defined and could potentially match:
    "unsigned int __cdecl llvm::crc32(unsigned int,class llvm::ArrayRef<unsigned char>)" (?crc32@llvm@@YAIIV?$ArrayRef@E@1@@Z)
    "unsigned int __cdecl llvm::crc32(class llvm::ArrayRef<unsigned char>)" (?crc32@llvm@@YAIV?$ArrayRef@E@1@@Z)
    "unsigned int __cdecl llvm::zlib::crc32(class llvm::StringRef)" (?crc32@zlib@llvm@@YAIVStringRef@2@@Z)
LLVMSupport.lib(Compression.obj) : error LNK2019: unresolved external symbol compress2 referenced in function "class llvm::Error __cdecl llvm::zlib::compress(class llvm::StringRef,class llvm::SmallVectorImpl<char> &,int)" (?compress@zlib@llvm@@YA?AVError@2@VStringRef@2@AEAV?$SmallVectorImpl@D@2@H@Z)
LLVMSupport.lib(Compression.obj) : error LNK2019: unresolved external symbol compressBound referenced in function "class llvm::Error __cdecl llvm::zlib::compress(class llvm::StringRef,class llvm::SmallVectorImpl<char> &,int)" (?compress@zlib@llvm@@YA?AVError@2@VStringRef@2@AEAV?$SmallVectorImpl@D@2@H@Z)
LLVMSupport.lib(Compression.obj) : error LNK2019: unresolved external symbol uncompress referenced in function "class llvm::Error __cdecl llvm::zlib::uncompress(class llvm::StringRef,char *,unsigned __int64 &)" (?uncompress@zlib@llvm@@YA?AVError@2@VStringRef@2@PEADAEA_K@Z)
  Hint on symbols that are defined and could potentially match:
    "public: void __cdecl llvm::IntEqClasses::uncompress(void)" (?uncompress@IntEqClasses@llvm@@QEAAXXZ)
    "class llvm::Error __cdecl llvm::zlib::uncompress(class llvm::StringRef,class llvm::SmallVectorImpl<char> &,unsigned __int64)" (?uncompress@zlib@llvm@@YA?AVError@2@VStringRef@2@AEAV?$SmallVectorImpl@D@2@_K@Z)
    "class llvm::Error __cdecl llvm::zlib::uncompress(class llvm::StringRef,char *,unsigned __int64 &)" (?uncompress@zlib@llvm@@YA?AVError@2@VStringRef@2@PEADAEA_K@Z)
test.exe : fatal error LNK1120: 4 unresolved externals

The best I can make of it is that it's not finding zlib.我能做到的最好的就是它没有找到zlib。 List of LLVM libraries that appear to exist on my machine follows.我的机器上似乎存在的 LLVM 库列表如下。 I don't see any mention of zlib among them;我没有看到其中提到 zlib ; should it be there?它应该在那里吗? Is there an alternative CMake instruction that would cause it to be built?是否有替代的 CMake 指令会导致它被构建? This problem started manifesting the other day after I rebuilt LLVM, but I used the same build script as before.在我重建 LLVM 后的前几天,这个问题开始显现,但我使用了与以前相同的构建脚本。

Alternatively, could it be finding the wrong version first?或者,它会先找到错误的版本吗? I have appended a list of the libraries link.exe says it is looking in;我已经附加了一个库列表 link.exe 说它正在寻找; none of them look out of place?他们都不显得格格不入?

LLVM libraries: LLVM 库:

clangAnalysis.lib
clangAnalysisFlowSensitive.lib
clangAPINotes.lib
clangARCMigrate.lib
clangAST.lib
clangASTMatchers.lib
clangBasic.lib
clangCodeGen.lib
clangCrossTU.lib
clangDependencyScanning.lib
clangDirectoryWatcher.lib
clangDriver.lib
clangDynamicASTMatchers.lib
clangEdit.lib
clangFormat.lib
clangFrontend.lib
clangFrontendTool.lib
clangHandleCXX.lib
clangHandleLLVM.lib
clangIndex.lib
clangIndexSerialization.lib
clangInterpreter.lib
clangLex.lib
clangParse.lib
clangRewrite.lib
clangRewriteFrontend.lib
clangSema.lib
clangSerialization.lib
clangStaticAnalyzerCheckers.lib
clangStaticAnalyzerCore.lib
clangStaticAnalyzerFrontend.lib
clangTesting.lib
clangTooling.lib
clangToolingASTDiff.lib
clangToolingCore.lib
clangToolingInclusions.lib
clangToolingRefactoring.lib
clangToolingSyntax.lib
clangTransformer.lib
DynamicLibraryLib.lib
gtest.lib
gtest_main.lib
libclang.lib
LLVM-C.lib
LLVMAArch64AsmParser.lib
LLVMAArch64CodeGen.lib
LLVMAArch64Desc.lib
LLVMAArch64Disassembler.lib
LLVMAArch64Info.lib
LLVMAArch64Utils.lib
LLVMAggressiveInstCombine.lib
LLVMAMDGPUAsmParser.lib
LLVMAMDGPUCodeGen.lib
LLVMAMDGPUDesc.lib
LLVMAMDGPUDisassembler.lib
LLVMAMDGPUInfo.lib
LLVMAMDGPUTargetMCA.lib
LLVMAMDGPUUtils.lib
LLVMAnalysis.lib
LLVMARMAsmParser.lib
LLVMARMCodeGen.lib
LLVMARMDesc.lib
LLVMARMDisassembler.lib
LLVMARMInfo.lib
LLVMARMUtils.lib
LLVMAsmParser.lib
LLVMAsmPrinter.lib
LLVMAVRAsmParser.lib
LLVMAVRCodeGen.lib
LLVMAVRDesc.lib
LLVMAVRDisassembler.lib
LLVMAVRInfo.lib
LLVMBinaryFormat.lib
LLVMBitReader.lib
LLVMBitstreamReader.lib
LLVMBitWriter.lib
LLVMBPFAsmParser.lib
LLVMBPFCodeGen.lib
LLVMBPFDesc.lib
LLVMBPFDisassembler.lib
LLVMBPFInfo.lib
LLVMCFGuard.lib
LLVMCFIVerify.lib
LLVMCodeGen.lib
LLVMCore.lib
LLVMCoroutines.lib
LLVMCoverage.lib
LLVMDebugInfoCodeView.lib
LLVMDebuginfod.lib
LLVMDebugInfoDWARF.lib
LLVMDebugInfoGSYM.lib
LLVMDebugInfoMSF.lib
LLVMDebugInfoPDB.lib
LLVMDemangle.lib
LLVMDiff.lib
LLVMDlltoolDriver.lib
LLVMDWARFLinker.lib
LLVMDWP.lib
LLVMExecutionEngine.lib
LLVMExegesis.lib
LLVMExegesisAArch64.lib
LLVMExegesisMips.lib
LLVMExegesisPowerPC.lib
LLVMExegesisX86.lib
LLVMExtensions.lib
LLVMFileCheck.lib
LLVMFrontendOpenACC.lib
LLVMFrontendOpenMP.lib
LLVMFuzzMutate.lib
LLVMGlobalISel.lib
LLVMHexagonAsmParser.lib
LLVMHexagonCodeGen.lib
LLVMHexagonDesc.lib
LLVMHexagonDisassembler.lib
LLVMHexagonInfo.lib
LLVMInstCombine.lib
LLVMInstrumentation.lib
LLVMInterfaceStub.lib
LLVMInterpreter.lib
LLVMipo.lib
LLVMIRReader.lib
LLVMJITLink.lib
LLVMLanaiAsmParser.lib
LLVMLanaiCodeGen.lib
LLVMLanaiDesc.lib
LLVMLanaiDisassembler.lib
LLVMLanaiInfo.lib
LLVMLibDriver.lib
LLVMLineEditor.lib
LLVMLinker.lib
LLVMLTO.lib
LLVMMC.lib
LLVMMCA.lib
LLVMMCDisassembler.lib
LLVMMCJIT.lib
LLVMMCParser.lib
LLVMMipsAsmParser.lib
LLVMMipsCodeGen.lib
LLVMMipsDesc.lib
LLVMMipsDisassembler.lib
LLVMMipsInfo.lib
LLVMMIRParser.lib
LLVMMSP430AsmParser.lib
LLVMMSP430CodeGen.lib
LLVMMSP430Desc.lib
LLVMMSP430Disassembler.lib
LLVMMSP430Info.lib
LLVMNVPTXCodeGen.lib
LLVMNVPTXDesc.lib
LLVMNVPTXInfo.lib
LLVMObjCARCOpts.lib
LLVMObject.lib
LLVMObjectYAML.lib
LLVMOption.lib
LLVMOrcJIT.lib
LLVMOrcShared.lib
LLVMOrcTargetProcess.lib
LLVMPasses.lib
LLVMPowerPCAsmParser.lib
LLVMPowerPCCodeGen.lib
LLVMPowerPCDesc.lib
LLVMPowerPCDisassembler.lib
LLVMPowerPCInfo.lib
LLVMProfileData.lib
LLVMRemarks.lib
LLVMRISCVAsmParser.lib
LLVMRISCVCodeGen.lib
LLVMRISCVDesc.lib
LLVMRISCVDisassembler.lib
LLVMRISCVInfo.lib
LLVMRuntimeDyld.lib
LLVMScalarOpts.lib
LLVMSelectionDAG.lib
LLVMSparcAsmParser.lib
LLVMSparcCodeGen.lib
LLVMSparcDesc.lib
LLVMSparcDisassembler.lib
LLVMSparcInfo.lib
LLVMSupport.lib
LLVMSymbolize.lib
LLVMSystemZAsmParser.lib
LLVMSystemZCodeGen.lib
LLVMSystemZDesc.lib
LLVMSystemZDisassembler.lib
LLVMSystemZInfo.lib
LLVMTableGen.lib
LLVMTableGenGlobalISel.lib
LLVMTarget.lib
LLVMTestingSupport.lib
LLVMTextAPI.lib
LLVMTransformUtils.lib
LLVMVEAsmParser.lib
LLVMVECodeGen.lib
LLVMVectorize.lib
LLVMVEDesc.lib
LLVMVEDisassembler.lib
LLVMVEInfo.lib
LLVMWebAssemblyAsmParser.lib
LLVMWebAssemblyCodeGen.lib
LLVMWebAssemblyDesc.lib
LLVMWebAssemblyDisassembler.lib
LLVMWebAssemblyInfo.lib
LLVMWebAssemblyUtils.lib
LLVMWindowsManifest.lib
LLVMX86AsmParser.lib
LLVMX86CodeGen.lib
LLVMX86Desc.lib
LLVMX86Disassembler.lib
LLVMX86Info.lib
LLVMX86TargetMCA.lib
LLVMXCoreCodeGen.lib
LLVMXCoreDesc.lib
LLVMXCoreDisassembler.lib
LLVMXCoreInfo.lib
LLVMXRay.lib
LTO.lib
Remarks.lib

link /verbose:lib output: link /verbose:lib输出:

Searching C:\llvm-project\build\Debug\lib\LLVMAggressiveInstCombine.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMAnalysis.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMAsmParser.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBinaryFormat.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBitReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBitstreamReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMCodeGen.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMCore.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMDebugInfoDWARF.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMDemangle.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMFrontendOpenMP.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMInstCombine.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMInstrumentation.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMipo.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMIRReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMLinker.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMMC.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMMCParser.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMObjCARCOpts.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMObject.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMProfileData.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMRemarks.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMScalarOpts.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMSupport.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTarget.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTextAPI.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTransformUtils.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMVectorize.lib:
Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\lib\x64\msvcprtd.lib:
Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\lib\x64\MSVCRTD.lib:
Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\lib\x64\OLDNAMES.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\uuid.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\advapi32.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\ole32.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\psapi.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\shell32.lib:
Searching C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x64\kernel32.lib:
Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\lib\x64\vcruntimed.lib:
Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x64\ucrtd.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMAggressiveInstCombine.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMAnalysis.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMAsmParser.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBinaryFormat.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBitReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMBitstreamReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMCodeGen.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMCore.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMDebugInfoDWARF.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMDemangle.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMFrontendOpenMP.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMInstCombine.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMInstrumentation.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMipo.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMIRReader.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMLinker.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMMC.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMMCParser.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMObjCARCOpts.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMObject.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMProfileData.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMRemarks.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMScalarOpts.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMSupport.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTarget.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTextAPI.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMTransformUtils.lib:
Searching C:\llvm-project\build\Debug\lib\LLVMVectorize.lib:
Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\lib\x64\msvcprtd.lib:

It turns out that LLVM expects z.lib to be a system library;事实证明,LLVM 期望 z.lib 是一个系统库; z.lib is not a system library on Windows. z.lib 不是 Windows 上的系统库。 Explicitly supplying a path to a copy of z.lib makes it work.显式提供 z.lib 副本的路径使其工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM