简体   繁体   中英

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 . 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 build procedure:

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. List of LLVM libraries that appear to exist on my machine follows. I don't see any mention of zlib among them; should it be there? Is there an alternative CMake instruction that would cause it to be built? This problem started manifesting the other day after I rebuilt LLVM, but I used the same build script as before.

Alternatively, could it be finding the wrong version first? I have appended a list of the libraries link.exe says it is looking in; none of them look out of place?

LLVM libraries:

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:

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; z.lib is not a system library on Windows. Explicitly supplying a path to a copy of z.lib makes it work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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