-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
On my Arch Linux system:
$ uname -a
Linux wink-desktop 5.0.7-arch1-1-ARCH #1 SMP PREEMPT Mon Apr 8 10:37:08 UTC 2019 x86_64 GNU/Linux
wink@wink-desktop:~/prgs/ziglang/zig2 (master)
$ gcc --version
gcc (GCC) 8.2.1 20181127
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Building the Release version of zig fails:
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ rm -rf * .ninja_*
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release
-- The C compiler identification is GNU 8.2.1
-- The CXX compiler identification is GNU 8.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Configuring zig version 0.4.0+0f8fc3b9
-- Found LLVM: /usr/lib/libLLVMFuzzMutate.a;/usr/lib/libLLVMTableGen.a;/usr/lib/libLLVMLibDriver.a;/usr/lib/libLLVMDlltoolDriver.a;/usr/lib/libLLVMOption.a;/usr/lib/libLLVMXRay.a;/usr/lib/libLLVMLTO.a;/usr/lib/libLLVMPasses.a;/usr/lib/libLLVMObjCARCOpts.a;/usr/lib/libLLVMCoroutines.a;/usr/lib/libLLVMTextAPI.a;/usr/lib/libLLVMWindowsManifest.a;/usr/lib/libLLVMInterpreter.a;/usr/lib/libLLVMOptRemarks.a;/usr/lib/libLLVMMIRParser.a;/usr/lib/libLLVMObjectYAML.a;/usr/lib/libLLVMMCA.a;/usr/lib/libLLVMXCoreDisassembler.a;/usr/lib/libLLVMXCoreCodeGen.a;/usr/lib/libLLVMXCoreDesc.a;/usr/lib/libLLVMXCoreInfo.a;/usr/lib/libLLVMXCoreAsmPrinter.a;/usr/lib/libLLVMWebAssemblyDisassembler.a;/usr/lib/libLLVMWebAssemblyCodeGen.a;/usr/lib/libLLVMWebAssemblyDesc.a;/usr/lib/libLLVMWebAssemblyAsmPrinter.a;/usr/lib/libLLVMWebAssemblyAsmParser.a;/usr/lib/libLLVMWebAssemblyInfo.a;/usr/lib/libLLVMSystemZDisassembler.a;/usr/lib/libLLVMSystemZCodeGen.a;/usr/lib/libLLVMSystemZAsmParser.a;/usr/lib/libLLVMSystemZDesc.a;/usr/lib/libLLVMSystemZInfo.a;/usr/lib/libLLVMSystemZAsmPrinter.a;/usr/lib/libLLVMSparcDisassembler.a;/usr/lib/libLLVMSparcCodeGen.a;/usr/lib/libLLVMSparcAsmParser.a;/usr/lib/libLLVMSparcDesc.a;/usr/lib/libLLVMSparcInfo.a;/usr/lib/libLLVMSparcAsmPrinter.a;/usr/lib/libLLVMPowerPCDisassembler.a;/usr/lib/libLLVMPowerPCCodeGen.a;/usr/lib/libLLVMPowerPCAsmParser.a;/usr/lib/libLLVMPowerPCDesc.a;/usr/lib/libLLVMPowerPCInfo.a;/usr/lib/libLLVMPowerPCAsmPrinter.a;/usr/lib/libLLVMNVPTXCodeGen.a;/usr/lib/libLLVMNVPTXDesc.a;/usr/lib/libLLVMNVPTXInfo.a;/usr/lib/libLLVMNVPTXAsmPrinter.a;/usr/lib/libLLVMMSP430Disassembler.a;/usr/lib/libLLVMMSP430CodeGen.a;/usr/lib/libLLVMMSP430AsmParser.a;/usr/lib/libLLVMMSP430Desc.a;/usr/lib/libLLVMMSP430Info.a;/usr/lib/libLLVMMSP430AsmPrinter.a;/usr/lib/libLLVMMipsDisassembler.a;/usr/lib/libLLVMMipsCodeGen.a;/usr/lib/libLLVMMipsAsmParser.a;/usr/lib/libLLVMMipsDesc.a;/usr/lib/libLLVMMipsInfo.a;/usr/lib/libLLVMMipsAsmPrinter.a;/usr/lib/libLLVMLanaiDisassembler.a;/usr/lib/libLLVMLanaiCodeGen.a;/usr/lib/libLLVMLanaiAsmParser.a;/usr/lib/libLLVMLanaiDesc.a;/usr/lib/libLLVMLanaiAsmPrinter.a;/usr/lib/libLLVMLanaiInfo.a;/usr/lib/libLLVMHexagonDisassembler.a;/usr/lib/libLLVMHexagonCodeGen.a;/usr/lib/libLLVMHexagonAsmParser.a;/usr/lib/libLLVMHexagonDesc.a;/usr/lib/libLLVMHexagonInfo.a;/usr/lib/libLLVMBPFDisassembler.a;/usr/lib/libLLVMBPFCodeGen.a;/usr/lib/libLLVMBPFAsmParser.a;/usr/lib/libLLVMBPFDesc.a;/usr/lib/libLLVMBPFInfo.a;/usr/lib/libLLVMBPFAsmPrinter.a;/usr/lib/libLLVMARMDisassembler.a;/usr/lib/libLLVMARMCodeGen.a;/usr/lib/libLLVMARMAsmParser.a;/usr/lib/libLLVMARMDesc.a;/usr/lib/libLLVMARMInfo.a;/usr/lib/libLLVMARMAsmPrinter.a;/usr/lib/libLLVMARMUtils.a;/usr/lib/libLLVMAMDGPUDisassembler.a;/usr/lib/libLLVMAMDGPUCodeGen.a;/usr/lib/libLLVMipo.a;/usr/lib/libLLVMInstrumentation.a;/usr/lib/libLLVMVectorize.a;/usr/lib/libLLVMLinker.a;/usr/lib/libLLVMIRReader.a;/usr/lib/libLLVMAsmParser.a;/usr/lib/libLLVMAMDGPUAsmParser.a;/usr/lib/libLLVMAMDGPUDesc.a;/usr/lib/libLLVMAMDGPUInfo.a;/usr/lib/libLLVMAMDGPUAsmPrinter.a;/usr/lib/libLLVMAMDGPUUtils.a;/usr/lib/libLLVMAArch64Disassembler.a;/usr/lib/libLLVMAArch64CodeGen.a;/usr/lib/libLLVMAArch64AsmParser.a;/usr/lib/libLLVMAArch64Desc.a;/usr/lib/libLLVMAArch64Info.a;/usr/lib/libLLVMAArch64AsmPrinter.a;/usr/lib/libLLVMAArch64Utils.a;/usr/lib/libLLVMCoverage.a;/usr/lib/libLLVMOrcJIT.a;/usr/lib/libLLVMX86Disassembler.a;/usr/lib/libLLVMX86AsmParser.a;/usr/lib/libLLVMX86CodeGen.a;/usr/lib/libLLVMGlobalISel.a;/usr/lib/libLLVMSelectionDAG.a;/usr/lib/libLLVMAsmPrinter.a;/usr/lib/libLLVMCodeGen.a;/usr/lib/libLLVMScalarOpts.a;/usr/lib/libLLVMInstCombine.a;/usr/lib/libLLVMAggressiveInstCombine.a;/usr/lib/libLLVMTransformUtils.a;/usr/lib/libLLVMBitWriter.a;/usr/lib/libLLVMX86Desc.a;/usr/lib/libLLVMMCDisassembler.a;/usr/lib/libLLVMX86Info.a;/usr/lib/libLLVMX86AsmPrinter.a;/usr/lib/libLLVMX86Utils.a;/usr/lib/libLLVMMCJIT.a;/usr/lib/libLLVMExecutionEngine.a;/usr/lib/libLLVMTarget.a;/usr/lib/libLLVMAnalysis.a;/usr/lib/libLLVMProfileData.a;/usr/lib/libLLVMRuntimeDyld.a;/usr/lib/libLLVMLineEditor.a;/usr/lib/libLLVMSymbolize.a;/usr/lib/libLLVMDebugInfoPDB.a;/usr/lib/libLLVMDebugInfoDWARF.a;/usr/lib/libLLVMObject.a;/usr/lib/libLLVMMCParser.a;/usr/lib/libLLVMMC.a;/usr/lib/libLLVMDebugInfoCodeView.a;/usr/lib/libLLVMDebugInfoMSF.a;/usr/lib/libLLVMBitReader.a;/usr/lib/libLLVMCore.a;/usr/lib/libLLVMBinaryFormat.a;/usr/lib/libLLVMSupport.a;/usr/lib/libLLVMDemangle.a;-lz;-lrt;-ldl;-ltinfo;-lpthread;-lm;-lxml2
-- Found CLANG: /usr/lib/libclangFrontendTool.so;/usr/lib/libclangCodeGen.so;/usr/lib/libclangFrontend.so;/usr/lib/libclangDriver.so;/usr/lib/libclangSerialization.so;/usr/lib/libclangSema.so;/usr/lib/libclangStaticAnalyzerFrontend.so;/usr/lib/libclangStaticAnalyzerCheckers.so;/usr/lib/libclangStaticAnalyzerCore.so;/usr/lib/libclangAnalysis.so;/usr/lib/libclangASTMatchers.so;/usr/lib/libclangAST.so;/usr/lib/libclangParse.so;/usr/lib/libclangSema.so;/usr/lib/libclangBasic.so;/usr/lib/libclangEdit.so;/usr/lib/libclangLex.so;/usr/lib/libclangARCMigrate.so;/usr/lib/libclangRewriteFrontend.so;/usr/lib/libclangRewrite.so;/usr/lib/libclangCrossTU.so;/usr/lib/libclangIndex.so
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wink/prgs/ziglang/zig2/build
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ ninja
[270/272] Generating libuserland.a
FAILED: libuserland.a
cd /home/wink/prgs/ziglang/zig2 && /home/wink/prgs/ziglang/zig2/build/zig0 build --override-std-dir std --override-lib-dir /home/wink/prgs/ziglang/zig2 libuserland -Doutput-dir=/home/wink/prgs/ziglang/zig2/build
: CommandLine Error: Option 'dump-thin-cg-sccs' registered more than once!
LLVM ERROR: inconsistency in registered CommandLine options
ninja: build stopped: subcommand failed.
Building the Debug version succeeds:
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ rm -rf * .ninja_*
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug
-- The C compiler identification is GNU 8.2.1
-- The CXX compiler identification is GNU 8.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Configuring zig version 0.4.0+0f8fc3b9
-- Found LLVM: -lLLVM-8
-- Found CLANG: /usr/lib/libclangFrontendTool.so;/usr/lib/libclangCodeGen.so;/usr/lib/libclangFrontend.so;/usr/lib/libclangDriver.so;/usr/lib/libclangSerialization.so;/usr/lib/libclangSema.so;/usr/lib/libclangStaticAnalyzerFrontend.so;/usr/lib/libclangStaticAnalyzerCheckers.so;/usr/lib/libclangStaticAnalyzerCore.so;/usr/lib/libclangAnalysis.so;/usr/lib/libclangASTMatchers.so;/usr/lib/libclangAST.so;/usr/lib/libclangParse.so;/usr/lib/libclangSema.so;/usr/lib/libclangBasic.so;/usr/lib/libclangEdit.so;/usr/lib/libclangLex.so;/usr/lib/libclangARCMigrate.so;/usr/lib/libclangRewriteFrontend.so;/usr/lib/libclangRewrite.so;/usr/lib/libclangCrossTU.so;/usr/lib/libclangIndex.so
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wink/prgs/ziglang/zig2/build
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ ninja
[272/272] Linking CXX executable zig
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ ./zig version
0.4.0+0f8fc3b9
What's happening is Arch Linux has both static (libLLVM[[:alpha:]]+.a) and shared (libLLVM-8.so) libLLVM* libraries for LLVM. But it has only shared libclang[[:alpha:]]+.so libraries with the full C++ API for CLANG . Because of the logic in cmake/Findllvm.cmake when CMAKE_BUILD_TYPE is NOT "Debug" zig prefers static libraries for LLVM:
if(NOT(CMAKE_BUILD_TYPE STREQUAL "Debug") OR ZIG_STATIC)
execute_process(
COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static
OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
...
So we get the libLLVM[[:alpha:]]+.so files statically linked to zig0:
-- Found LLVM: /usr/lib/libLLVMFuzzMutate.a;/usr/lib/libLLVMTableGen.a;/usr/lib/libLLVMLibDriver.a;/usr/lib/libLLVMDlltoolDriver.a;/usr/lib/libLLVMOption.a;/usr/lib/libLLVMXRay.a;/usr/lib/libLLVMLTO.a;/usr/lib/libLLVMPasses.a;/usr/lib/libLLVMObjCARCOpts.a;/usr/lib/libLLVMCoroutines.a;/usr/lib/libLLVMTextAPI.a;/usr/lib/libLLVMWindowsManifest.a;/usr/lib/libLLVMInterpreter.a;/usr/lib/libLLVMOptRemarks.a;/usr/lib/libLLVMMIRParser.a;/usr/lib/libLLVMObjectYAML.a;/usr/lib/libLLVMMCA.a;/usr/lib/libLLVMXCoreDisassembler.a;/usr/lib/libLLVMXCoreCodeGen.a;/usr/lib/libLLVMXCoreDesc.a;/usr/lib/libLLVMXCoreInfo.a;/usr/lib/libLLVMXCoreAsmPrinter.a;/usr/lib/libLLVMWebAssemblyDisassembler.a;/usr/lib/libLLVMWebAssemblyCodeGen.a;/usr/lib/libLLVMWebAssemblyDesc.a;/usr/lib/libLLVMWebAssemblyAsmPrinter.a;/usr/lib/libLLVMWebAssemblyAsmParser.a;/usr/lib/libLLVMWebAssemblyInfo.a;/usr/lib/libLLVMSystemZDisassembler.a;/usr/lib/libLLVMSystemZCodeGen.a;/usr/lib/libLLVMSystemZAsmParser.a;/usr/lib/libLLVMSystemZDesc.a;/usr/lib/libLLVMSystemZInfo.a;/usr/lib/libLLVMSystemZAsmPrinter.a;/usr/lib/libLLVMSparcDisassembler.a;/usr/lib/libLLVMSparcCodeGen.a;/usr/lib/libLLVMSparcAsmParser.a;/usr/lib/libLLVMSparcDesc.a;/usr/lib/libLLVMSparcInfo.a;/usr/lib/libLLVMSparcAsmPrinter.a;/usr/lib/libLLVMPowerPCDisassembler.a;/usr/lib/libLLVMPowerPCCodeGen.a;/usr/lib/libLLVMPowerPCAsmParser.a;/usr/lib/libLLVMPowerPCDesc.a;/usr/lib/libLLVMPowerPCInfo.a;/usr/lib/libLLVMPowerPCAsmPrinter.a;/usr/lib/libLLVMNVPTXCodeGen.a;/usr/lib/libLLVMNVPTXDesc.a;/usr/lib/libLLVMNVPTXInfo.a;/usr/lib/libLLVMNVPTXAsmPrinter.a;/usr/lib/libLLVMMSP430Disassembler.a;/usr/lib/libLLVMMSP430CodeGen.a;/usr/lib/libLLVMMSP430AsmParser.a;/usr/lib/libLLVMMSP430Desc.a;/usr/lib/libLLVMMSP430Info.a;/usr/lib/libLLVMMSP430AsmPrinter.a;/usr/lib/libLLVMMipsDisassembler.a;/usr/lib/libLLVMMipsCodeGen.a;/usr/lib/libLLVMMipsAsmParser.a;/usr/lib/libLLVMMipsDesc.a;/usr/lib/libLLVMMipsInfo.a;/usr/lib/libLLVMMipsAsmPrinter.a;/usr/lib/libLLVMLanaiDisassembler.a;/usr/lib/libLLVMLanaiCodeGen.a;/usr/lib/libLLVMLanaiAsmParser.a;/usr/lib/libLLVMLanaiDesc.a;/usr/lib/libLLVMLanaiAsmPrinter.a;/usr/lib/libLLVMLanaiInfo.a;/usr/lib/libLLVMHexagonDisassembler.a;/usr/lib/libLLVMHexagonCodeGen.a;/usr/lib/libLLVMHexagonAsmParser.a;/usr/lib/libLLVMHexagonDesc.a;/usr/lib/libLLVMHexagonInfo.a;/usr/lib/libLLVMBPFDisassembler.a;/usr/lib/libLLVMBPFCodeGen.a;/usr/lib/libLLVMBPFAsmParser.a;/usr/lib/libLLVMBPFDesc.a;/usr/lib/libLLVMBPFInfo.a;/usr/lib/libLLVMBPFAsmPrinter.a;/usr/lib/libLLVMARMDisassembler.a;/usr/lib/libLLVMARMCodeGen.a;/usr/lib/libLLVMARMAsmParser.a;/usr/lib/libLLVMARMDesc.a;/usr/lib/libLLVMARMInfo.a;/usr/lib/libLLVMARMAsmPrinter.a;/usr/lib/libLLVMARMUtils.a;/usr/lib/libLLVMAMDGPUDisassembler.a;/usr/lib/libLLVMAMDGPUCodeGen.a;/usr/lib/libLLVMipo.a;/usr/lib/libLLVMInstrumentation.a;/usr/lib/libLLVMVectorize.a;/usr/lib/libLLVMLinker.a;/usr/lib/libLLVMIRReader.a;/usr/lib/libLLVMAsmParser.a;/usr/lib/libLLVMAMDGPUAsmParser.a;/usr/lib/libLLVMAMDGPUDesc.a;/usr/lib/libLLVMAMDGPUInfo.a;/usr/lib/libLLVMAMDGPUAsmPrinter.a;/usr/lib/libLLVMAMDGPUUtils.a;/usr/lib/libLLVMAArch64Disassembler.a;/usr/lib/libLLVMAArch64CodeGen.a;/usr/lib/libLLVMAArch64AsmParser.a;/usr/lib/libLLVMAArch64Desc.a;/usr/lib/libLLVMAArch64Info.a;/usr/lib/libLLVMAArch64AsmPrinter.a;/usr/lib/libLLVMAArch64Utils.a;/usr/lib/libLLVMCoverage.a;/usr/lib/libLLVMOrcJIT.a;/usr/lib/libLLVMX86Disassembler.a;/usr/lib/libLLVMX86AsmParser.a;/usr/lib/libLLVMX86CodeGen.a;/usr/lib/libLLVMGlobalISel.a;/usr/lib/libLLVMSelectionDAG.a;/usr/lib/libLLVMAsmPrinter.a;/usr/lib/libLLVMCodeGen.a;/usr/lib/libLLVMScalarOpts.a;/usr/lib/libLLVMInstCombine.a;/usr/lib/libLLVMAggressiveInstCombine.a;/usr/lib/libLLVMTransformUtils.a;/usr/lib/libLLVMBitWriter.a;/usr/lib/libLLVMX86Desc.a;/usr/lib/libLLVMMCDisassembler.a;/usr/lib/libLLVMX86Info.a;/usr/lib/libLLVMX86AsmPrinter.a;/usr/lib/libLLVMX86Utils.a;/usr/lib/libLLVMMCJIT.a;/usr/lib/libLLVMExecutionEngine.a;/usr/lib/libLLVMTarget.a;/usr/lib/libLLVMAnalysis.a;/usr/lib/libLLVMProfileData.a;/usr/lib/libLLVMRuntimeDyld.a;/usr/lib/libLLVMLineEditor.a;/usr/lib/libLLVMSymbolize.a;/usr/lib/libLLVMDebugInfoPDB.a;/usr/lib/libLLVMDebugInfoDWARF.a;/usr/lib/libLLVMObject.a;/usr/lib/libLLVMMCParser.a;/usr/lib/libLLVMMC.a;/usr/lib/libLLVMDebugInfoCodeView.a;/usr/lib/libLLVMDebugInfoMSF.a;/usr/lib/libLLVMBitReader.a;/usr/lib/libLLVMCore.a;/usr/lib/libLLVMBinaryFormat.a;/usr/lib/libLLVMSupport.a;/usr/lib/libLLVMDemangle.a;-lz;-lrt;-ldl;-ltinfo;-lpthread;-lm;-lxml2
But for CLANG we get shared libraries:
-- Found CLANG: /usr/lib/libclangFrontendTool.so;/usr/lib/libclangCodeGen.so;/usr/lib/libclangFrontend.so;/usr/lib/libclangDriver.so;/usr/lib/libclangSerialization.so;/usr/lib/libclangSema.so;/usr/lib/libclangStaticAnalyzerFrontend.so;/usr/lib/libclangStaticAnalyzerCheckers.so;/usr/lib/libclangStaticAnalyzerCore.so;/usr/lib/libclangAnalysis.so;/usr/lib/libclangASTMatchers.so;/usr/lib/libclangAST.so;/usr/lib/libclangParse.so;/usr/lib/libclangSema.so;/usr/lib/libclangBasic.so;/usr/lib/libclangEdit.so;/usr/lib/libclangLex.so;/usr/lib/libclangARCMigrate.so;/usr/lib/libclangRewriteFrontend.so;/usr/lib/libclangRewrite.so;/usr/lib/libclangCrossTU.so;/usr/lib/libclangIndex.so
So zig0 has statically linked libLLVM[[:alpha:]]+.a but to be able to link the CLANG shared libraries it needs libLLVM-8.so as can be seen in the ldd output:
wink@wink-desktop:~/prgs/ziglang/zig2/build
$ ldd ./zig0
linux-vdso.so.1 (0x00007fff76bfa000)
libclangFrontendTool.so.8 => /usr/lib/libclangFrontendTool.so.8 (0x00007f81cbc42000)
libclangCodeGen.so.8 => /usr/lib/libclangCodeGen.so.8 (0x00007f81cb7af000)
libclangFrontend.so.8 => /usr/lib/libclangFrontend.so.8 (0x00007f81cb646000)
libclangDriver.so.8 => /usr/lib/libclangDriver.so.8 (0x00007f81cb458000)
libclangSerialization.so.8 => /usr/lib/libclangSerialization.so.8 (0x00007f81cb2c3000)
libclangSema.so.8 => /usr/lib/libclangSema.so.8 (0x00007f81cab30000)
libclangStaticAnalyzerFrontend.so.8 => /usr/lib/libclangStaticAnalyzerFrontend.so.8 (0x00007f81caad3000)
libclangStaticAnalyzerCheckers.so.8 => /usr/lib/libclangStaticAnalyzerCheckers.so.8 (0x00007f81ca701000)
libclangStaticAnalyzerCore.so.8 => /usr/lib/libclangStaticAnalyzerCore.so.8 (0x00007f81ca4db000)
libclangAnalysis.so.8 => /usr/lib/libclangAnalysis.so.8 (0x00007f81ca3d5000)
libclangASTMatchers.so.8 => /usr/lib/libclangASTMatchers.so.8 (0x00007f81ca34f000)
libclangAST.so.8 => /usr/lib/libclangAST.so.8 (0x00007f81c9f2e000)
libclangParse.so.8 => /usr/lib/libclangParse.so.8 (0x00007f81c9e35000)
libclangBasic.so.8 => /usr/lib/libclangBasic.so.8 (0x00007f81c9b01000)
libclangEdit.so.8 => /usr/lib/libclangEdit.so.8 (0x00007f81c9af0000)
libclangLex.so.8 => /usr/lib/libclangLex.so.8 (0x00007f81c9a25000)
libclangARCMigrate.so.8 => /usr/lib/libclangARCMigrate.so.8 (0x00007f81c9759000)
libclangRewriteFrontend.so.8 => /usr/lib/libclangRewriteFrontend.so.8 (0x00007f81c96e0000)
libclangRewrite.so.8 => /usr/lib/libclangRewrite.so.8 (0x00007f81c96ca000)
libclangCrossTU.so.8 => /usr/lib/libclangCrossTU.so.8 (0x00007f81c96bb000)
libclangIndex.so.8 => /usr/lib/libclangIndex.so.8 (0x00007f81c9661000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f81c944a000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f81c9440000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f81c943b000)
libncursesw.so.6 => /usr/lib/libncursesw.so.6 (0x00007f81c93ca000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f81c93a9000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f81c9241000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f81c90bc000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f81c8f2d000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f81c8f13000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f81c8d4d000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f81cff14000)
>>> libLLVM-8.so => /usr/lib/../lib/libLLVM-8.so (0x00007f81c48cd000)
libclangFormat.so.8 => /usr/lib/../lib/libclangFormat.so.8 (0x00007f81c4833000)
libclangToolingCore.so.8 => /usr/lib/../lib/libclangToolingCore.so.8 (0x00007f81c481c000)
libicuuc.so.64 => /usr/lib/libicuuc.so.64 (0x00007f81c4644000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f81c441e000)
libffi.so.6 => /usr/lib/../lib/../lib/libffi.so.6 (0x00007f81c4413000)
libedit.so.0 => /usr/lib/../lib/../lib/libedit.so.0 (0x00007f81c43d9000)
libclangToolingInclusions.so.8 => /usr/lib/../lib/../lib/libclangToolingInclusions.so.8 (0x00007f81c43cb000)
libicudata.so.64 => /usr/lib/libicudata.so.64 (0x00007f81c2987000)
So we end up with two copies of the LLVM libraries, one static and one dynamic and so executing zig0 fails.
There are various work-arounds:
- Use only Debug
- Build llvm from source.
- Or as Duncan suggested tweak CMakelists.txt
In my opinion those work-arounds aren't great. I think all LLVM related libraries, static or shared, should be linked to zig the same way and the user should be able to control which.
Other thoughts?