Skip to content

Linking fails with various undefined reference to *AARCH64* (x86_64 build on x86_64) #417

Closed
@frantisekz

Description

@frantisekz

I am trying to build opencl-clang as standalone library with:

/usr/bin/cmake -S . -B redhat-linux-build -DCMAKE_C_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_Fortran_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DLIB_SUFFIX=64 -DBUILD_SHARED_LIBS:BOOL=ON -DPREFERRED_LLVM_VERSION=16.0.0

I have #415 and #416 applied on top of the 16.0.0 tag here to be able to even start the build process. spirv-llvm-translator is taken from system (separate .so, not part of llvm). The linking fails with:

[ 98%] Linking CXX shared library libopencl-clang.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/opencl-clang.dir/link.txt --verbose=1
/usr/bin/clang++ -fPIC -O2 -flto=thin -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS --config /usr/lib/rpm/redhat/redhat-hardened-clang.cfg -fstack-protector-strong   -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fno-rtti  -Wl,--no-undefined -Wl,-Bsymbolic -Wl,--version-script=/builddir/build/BUILD/opencl-clang-1adc46ef38aeba1585b3587b95b6af692a12e4f4/opencl_clang.map -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now   -flto=thin -fno-openmp-implicit-rpath -Wl,--build-id=sha1 -shared -Wl,-soname,libopencl-clang.so -o libopencl-clang.so "CMakeFiles/opencl-clang.dir/opencl_clang.cpp.o" "CMakeFiles/opencl-clang.dir/options.cpp.o" "CMakeFiles/opencl-clang.dir/pch_mgr.cpp.o" "CMakeFiles/opencl-clang.dir/options_compile.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c.h.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-base.h.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-12-spir.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-20-spir.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-30-spir.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-12-spir64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-20-spir64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-30-spir64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-12-spir-fp64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-20-spir-fp64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-30-spir-fp64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-12-spir64-fp64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-20-spir64-fp64.mod.cpp.o" "cl_headers/CMakeFiles/cl_headers.dir/opencl-c-30-spir64-fp64.mod.cpp.o" cl_headers/CMakeFiles/cl_headers.dir/module.modulemap.cpp.o  -ldl -lLLVMSPIRVLib -lclang-cpp /usr/lib64/libLLVMX86CodeGen.a /usr/lib64/libLLVMX86AsmParser.a /usr/lib64/libLLVMX86Desc.a /usr/lib64/libLLVMX86Info.a /usr/lib64/libLLVMX86Disassembler.a /usr/lib64/libLLVMAnalysis.a /usr/lib64/libLLVMCodeGen.a /usr/lib64/libLLVMCore.a /usr/lib64/libLLVMipo.a /usr/lib64/libLLVMInstCombine.a /usr/lib64/libLLVMInstrumentation.a /usr/lib64/libLLVMMC.a /usr/lib64/libLLVMMCParser.a /usr/lib64/libLLVMObjCARCOpts.a /usr/lib64/libLLVMOption.a /usr/lib64/libLLVMScalarOpts.a /usr/lib64/libLLVMSupport.a /usr/lib64/libLLVMTransformUtils.a /usr/lib64/libLLVMVectorize.a /usr/lib64/libLLVMAsmPrinter.a /usr/lib64/libLLVMSelectionDAG.a /usr/lib64/libLLVMMCDisassembler.a /usr/lib64/libLLVMProfileData.a /usr/lib64/libLLVMObject.a /usr/lib64/libLLVMBitWriter.a /usr/lib64/libLLVMIRReader.a /usr/lib64/libLLVMAsmParser.a /usr/lib64/libLLVMTarget.a /usr/lib64/libLLVMBitReader.a /usr/lib64/libLLVMNVPTXCodeGen.a /usr/lib64/libLLVMNVPTXDesc.a /usr/lib64/libLLVMNVPTXInfo.a /usr/lib64/libLLVMAMDGPUCodeGen.a /usr/lib64/libLLVMAMDGPUAsmParser.a /usr/lib64/libLLVMAMDGPUDesc.a /usr/lib64/libLLVMAMDGPUInfo.a /usr/lib64/libLLVMCFGuard.a /usr/lib64/libLLVMX86Info.a /usr/lib64/libLLVMAsmPrinter.a /usr/lib64/libLLVMGlobalISel.a /usr/lib64/libLLVMSelectionDAG.a /usr/lib64/libLLVMPasses.a /usr/lib64/libLLVMCoroutines.a /usr/lib64/libLLVMipo.a /usr/lib64/libLLVMInstrumentation.a /usr/lib64/libLLVMVectorize.a /usr/lib64/libLLVMFrontendOpenMP.a /usr/lib64/libLLVMLinker.a /usr/lib64/libLLVMIRPrinter.a /usr/lib64/libLLVMMIRParser.a /usr/lib64/libLLVMCodeGen.a /usr/lib64/libLLVMObjCARCOpts.a /usr/lib64/libLLVMScalarOpts.a /usr/lib64/libLLVMInstCombine.a /usr/lib64/libLLVMAggressiveInstCombine.a /usr/lib64/libLLVMTransformUtils.a /usr/lib64/libLLVMBitWriter.a /usr/lib64/libLLVMTarget.a /usr/lib64/libLLVMAMDGPUUtils.a /usr/lib64/libLLVMAnalysis.a /usr/lib64/libLLVMProfileData.a /usr/lib64/libLLVMSymbolize.a /usr/lib64/libLLVMDebugInfoDWARF.a /usr/lib64/libLLVMDebugInfoPDB.a /usr/lib64/libLLVMDebugInfoMSF.a /usr/lib64/libLLVMObject.a /usr/lib64/libLLVMMCParser.a /usr/lib64/libLLVMIRReader.a /usr/lib64/libLLVMAsmParser.a /usr/lib64/libLLVMBitReader.a /usr/lib64/libLLVMTextAPI.a /usr/lib64/libLLVMCore.a /usr/lib64/libLLVMRemarks.a /usr/lib64/libLLVMBitstreamReader.a /usr/lib64/libLLVMMC.a /usr/lib64/libLLVMDebugInfoCodeView.a /usr/lib64/libLLVMBinaryFormat.a /usr/lib64/libLLVMTargetParser.a /usr/lib64/libLLVMSupport.a /usr/lib64/libLLVMDemangle.a -lrt -ldl -lm /usr/lib64/libz.so /usr/lib64/libtinfo.so 
/usr/bin/ld: /tmp/lto-llvm-ead063.o: in function `llvm::InitializeAllTargetInfos()':
/usr/include/llvm/Config/Targets.def:26: undefined reference to `LLVMInitializeAArch64TargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:28: undefined reference to `LLVMInitializeARMTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:29: undefined reference to `LLVMInitializeAVRTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:30: undefined reference to `LLVMInitializeBPFTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:31: undefined reference to `LLVMInitializeHexagonTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:32: undefined reference to `LLVMInitializeLanaiTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:33: undefined reference to `LLVMInitializeLoongArchTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:34: undefined reference to `LLVMInitializeMipsTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:35: undefined reference to `LLVMInitializeMSP430TargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:37: undefined reference to `LLVMInitializePowerPCTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:38: undefined reference to `LLVMInitializeRISCVTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:39: undefined reference to `LLVMInitializeSparcTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:40: undefined reference to `LLVMInitializeSystemZTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:41: undefined reference to `LLVMInitializeVETargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:42: undefined reference to `LLVMInitializeWebAssemblyTargetInfo'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:44: undefined reference to `LLVMInitializeXCoreTargetInfo'
/usr/bin/ld: /tmp/lto-llvm-ead063.o: in function `llvm::InitializeAllTargets()':
/usr/include/llvm/Config/Targets.def:26: undefined reference to `LLVMInitializeAArch64Target'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:28: undefined reference to `LLVMInitializeARMTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:29: undefined reference to `LLVMInitializeAVRTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:30: undefined reference to `LLVMInitializeBPFTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:31: undefined reference to `LLVMInitializeHexagonTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:32: undefined reference to `LLVMInitializeLanaiTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:33: undefined reference to `LLVMInitializeLoongArchTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:34: undefined reference to `LLVMInitializeMipsTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:35: undefined reference to `LLVMInitializeMSP430Target'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:37: undefined reference to `LLVMInitializePowerPCTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:38: undefined reference to `LLVMInitializeRISCVTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:39: undefined reference to `LLVMInitializeSparcTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:40: undefined reference to `LLVMInitializeSystemZTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:41: undefined reference to `LLVMInitializeVETarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:42: undefined reference to `LLVMInitializeWebAssemblyTarget'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:44: undefined reference to `LLVMInitializeXCoreTarget'
/usr/bin/ld: /tmp/lto-llvm-ead063.o: in function `llvm::InitializeAllAsmPrinters()':
/usr/include/llvm/Config/AsmPrinters.def:27: undefined reference to `LLVMInitializeAArch64AsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:29: undefined reference to `LLVMInitializeARMAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:30: undefined reference to `LLVMInitializeAVRAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:31: undefined reference to `LLVMInitializeBPFAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:32: undefined reference to `LLVMInitializeHexagonAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:33: undefined reference to `LLVMInitializeLanaiAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:34: undefined reference to `LLVMInitializeLoongArchAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:35: undefined reference to `LLVMInitializeMipsAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:36: undefined reference to `LLVMInitializeMSP430AsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:38: undefined reference to `LLVMInitializePowerPCAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:39: undefined reference to `LLVMInitializeRISCVAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:40: undefined reference to `LLVMInitializeSparcAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:41: undefined reference to `LLVMInitializeSystemZAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:42: undefined reference to `LLVMInitializeVEAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:43: undefined reference to `LLVMInitializeWebAssemblyAsmPrinter'
/usr/bin/ld: /usr/include/llvm/Config/AsmPrinters.def:45: undefined reference to `LLVMInitializeXCoreAsmPrinter'
/usr/bin/ld: /tmp/lto-llvm-ead063.o: in function `llvm::InitializeAllAsmParsers()':
/usr/include/llvm/Config/AsmParsers.def:27: undefined reference to `LLVMInitializeAArch64AsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:29: undefined reference to `LLVMInitializeARMAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:30: undefined reference to `LLVMInitializeAVRAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:31: undefined reference to `LLVMInitializeBPFAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:32: undefined reference to `LLVMInitializeHexagonAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:33: undefined reference to `LLVMInitializeLanaiAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:34: undefined reference to `LLVMInitializeLoongArchAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:35: undefined reference to `LLVMInitializeMipsAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:36: undefined reference to `LLVMInitializeMSP430AsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:37: undefined reference to `LLVMInitializePowerPCAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:38: undefined reference to `LLVMInitializeRISCVAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:39: undefined reference to `LLVMInitializeSparcAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:40: undefined reference to `LLVMInitializeSystemZAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:41: undefined reference to `LLVMInitializeVEAsmParser'
/usr/bin/ld: /usr/include/llvm/Config/AsmParsers.def:42: undefined reference to `LLVMInitializeWebAssemblyAsmParser'
/usr/bin/ld: /tmp/lto-llvm-ead063.o: in function `llvm::InitializeAllTargetMCs()':
/usr/include/llvm/Config/Targets.def:26: undefined reference to `LLVMInitializeAArch64TargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:28: undefined reference to `LLVMInitializeARMTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:29: undefined reference to `LLVMInitializeAVRTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:30: undefined reference to `LLVMInitializeBPFTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:31: undefined reference to `LLVMInitializeHexagonTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:32: undefined reference to `LLVMInitializeLanaiTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:33: undefined reference to `LLVMInitializeLoongArchTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:34: undefined reference to `LLVMInitializeMipsTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:35: undefined reference to `LLVMInitializeMSP430TargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:37: undefined reference to `LLVMInitializePowerPCTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:38: undefined reference to `LLVMInitializeRISCVTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:39: undefined reference to `LLVMInitializeSparcTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:40: undefined reference to `LLVMInitializeSystemZTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:41: undefined reference to `LLVMInitializeVETargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:42: undefined reference to `LLVMInitializeWebAssemblyTargetMC'
/usr/bin/ld: /usr/include/llvm/Config/Targets.def:44: undefined reference to `LLVMInitializeXCoreTargetMC'
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions