-
-
Notifications
You must be signed in to change notification settings - Fork 218
Description
Hello,
I would like to build llvm-mingw for Windows under Linux using mingw-w64-gcc. Unfortunately, every time I run the build-llvm.sh script I get a bunch of 'undefined reference' errors, e.g. when linking libLTO.dll, e.g.:
undefined reference to llvm::StringMapImpl::hash(llvm::StringRef)'
This happens every time I execute the command: ./build-llvm.sh --host=x86_64-w64-mingw32 /LLVM_MINGW
. It looks like the following command is used by the script to build the toolchain:
cmake -DCMAKE_INSTALL_PREFIX=/LLVM-MINGW -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=OFF -DLLVM_ENABLE_PROJECTS=clang;lld;lldb;clang-tools-extra -DLLVM_TARGETS_TO_BUILD=ARM;AArch64;X86;NVPTX -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_TOOLCHAIN_TOOLS=llvm-ar;llvm-ranlib;llvm-objdump;llvm-rc;llvm-cvtres;llvm-nm;llvm-strings;llvm-readobj;llvm-dlltool;llvm-pdbutil;llvm-objcopy;llvm-strip;llvm-cov;llvm-profdata;llvm-addr2line;llvm-symbolizer;llvm-windres;llvm-ml;llvm-readelf;llvm-size;llvm-cxxfilt;llvm-lib -DLLVM_HOST_TRIPLE=x86_64-w64-mingw32 -DLLVM_BUILD_INSTRUMENTED=OFF -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres -DCMAKE_FIND_ROOT_PATH=/usr/x86_64-w64-mingw32 -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY ..
CMAKE_FIND_ROOT_PATH correctly points to /usr/x86_64-w64-mingw32, where the GCC-based toolchain is installed. This directory contains the bin/, include/ and lib/ directories containing the mingw headers and libraries, among other things.
From what I have seen, llvm-mingw itself is used to build the Windows version. However, I already have GCC-based binaries of mingw-w64 installed and I wanted to use them so as not to compile LLVM twice. Finally, more error output:
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTVN4llvm2cl11OptionValueIcEE[_ZTVN4llvm2cl11OptionValueIcEE]+0x18): undefined reference to
llvm::cl::GenericOptionValue::anchor()' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTVN4llvm2cl11OptionValueIbEE[_ZTVN4llvm2cl11OptionValueIbEE]+0x18): undefined reference to
llvm::cl::GenericOptionValue::anchor()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTV24LTOToolDiagnosticHandler[_ZTV24LTOToolDiagnosticHandler]+0x28): undefined reference tollvm::DiagnosticHandler::isAnalysisRemarkEnabled(llvm::StringRef) const' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTV24LTOToolDiagnosticHandler[_ZTV24LTOToolDiagnosticHandler]+0x30): undefined reference to
llvm::DiagnosticHandler::isMissedOptRemarkEnabled(llvm::StringRef) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTV24LTOToolDiagnosticHandler[_ZTV24LTOToolDiagnosticHandler]+0x38): undefined reference tollvm::DiagnosticHandler::isPassedOptRemarkEnabled(llvm::StringRef) const' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$_ZTV24LTOToolDiagnosticHandler[_ZTV24LTOToolDiagnosticHandler]+0x40): undefined reference to
llvm::DiagnosticHandler::isAnyRemarkEnabled() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl6parserIbEE[.refptr._ZTVN4llvm2cl6parserIbEE]+0x0): undefined reference tovtable for llvm::cl::parser<bool>' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl6parserIcEE[.refptr._ZTVN4llvm2cl6parserIcEE]+0x0): undefined reference to
vtable for llvm::cl::parser'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm18raw_string_ostreamE[.refptr._ZTVN4llvm18raw_string_ostreamE]+0x0): undefined reference tovtable for llvm::raw_string_ostream' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm27DiagnosticPrinterRawOStreamE[.refptr._ZTVN4llvm27DiagnosticPrinterRawOStreamE]+0x0): undefined reference to
vtable for llvm::DiagnosticPrinterRawOStream'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl3optIcLb0ENS0_6parserIcEEEE[.refptr._ZTVN4llvm2cl3optIcLb0ENS0_6parserIcEEEE]+0x0): undefined reference tovtable for llvm::cl::opt<char, false, llvm::cl::parser<char> >' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl6OptionE[.refptr._ZTVN4llvm2cl6OptionE]+0x0): undefined reference to
vtable for llvm::cl::Option'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl17basic_parser_implE[.refptr._ZTVN4llvm2cl17basic_parser_implE]+0x0): undefined reference tovtable for llvm::cl::basic_parser_impl' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm2cl3optIbLb0ENS0_6parserIbEEEE[.refptr._ZTVN4llvm2cl3optIbLb0ENS0_6parserIbEEEE]+0x0): undefined reference to
vtable for llvm::cl::opt<bool, false, llvm::cl::parser >'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(lto.cpp.obj):lto.cpp:(.rdata$.refptr._ZTVN4llvm17DiagnosticHandlerE[.refptr._ZTVN4llvm17DiagnosticHandlerE]+0x0): undefined reference tovtable for llvm::DiagnosticHandler' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x5): undefined reference to
LLVMInitializeARMTargetInfo'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0xa): undefined reference toLLVMInitializeAArch64TargetInfo' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0xf): undefined reference to
LLVMInitializeX86TargetInfo'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x14): undefined reference toLLVMInitializeNVPTXTargetInfo' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x19): undefined reference to
LLVMInitializeARMTargetMC'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x1e): undefined reference toLLVMInitializeAArch64TargetMC' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x23): undefined reference to
LLVMInitializeX86TargetMC'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x28): undefined reference toLLVMInitializeNVPTXTargetMC' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x2d): undefined reference to
LLVMInitializeARMAsmParser'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x32): undefined reference toLLVMInitializeAArch64AsmParser' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x37): undefined reference to
LLVMInitializeX86AsmParser'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x3c): undefined reference toLLVMInitializeARMDisassembler' /usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x41): undefined reference to
LLVMInitializeAArch64Disassembler'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/LTO.dir/objects.a(LTODisassembler.cpp.obj):LTODisassembler.cpp:(.text$lto_initialize_disassembler+0x4b): undefined reference to `LLVMInitializeX86Disassembler'
Any suggestions would be appreciated.