cling
cling copied to clipboard
Link errors when attempting to use external LLVM & Clang
Describe the bug
When using LLVM and Clang as external dependencies (but built using their patched sources), Cling fails to link, showing various missing LLVM symbols.
[ 97%] Building CXX object tools/Jupyter/CMakeFiles/libclingJupyter.dir/Kernel.cpp.o
cd /tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/build/tools/Jupyter && /gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin/c++ -DCLING_VERSION="1.0~dev" -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/build/tools/Jupyter -I/tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/source/tools/Jupyter -I/tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/source/include -I/tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/build/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -w -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing -Wno-nested-anon-types -Wno-covered-switch-default -Wno-unused-local-typedef -fno-rtti -O3 -DNDEBUG -fPIC -fvisibility=default -fvisibility-inlines-hidden -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -fexceptions -frtti -o CMakeFiles/libclingJupyter.dir/Kernel.cpp.o -c /tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/source/tools/Jupyter/Kernel.cpp
[ 98%] Linking CXX shared library ../../lib/libclingJupyter.so
cd /tmp/guix-build-cling-0.9-1.d78d1a0.drv-0/build/tools/Jupyter && /gnu/store/qixwn3dw6glj848hrr3h8fxm6s7wzxm3-cmake-minimal-3.16.5/bin/cmake -E cmake_link_script CMakeFiles/libclingJupyter.dir/link.txt --verbose=1
/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin/c++ -fPIC -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -w -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing -Wno-nested-anon-types -Wno-covered-switch-default -Wno-unused-local-typedef -fno-rtti -O3 -DNDEBUG -Wl,-O3 -Wl,-z,defs -Wl,-z,nodelete -shared -Wl,-soname,libclingJupyter.so.9 -o ../../lib/libclingJupyter.so.9 CMakeFiles/libclingJupyter.dir/Kernel.cpp.o -Wl,-rpath,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -lclangAST -lclangBasic -lclangCodeGen -lclangDriver -lclangFrontend -lclangLex -lclangParse -lclangSema -lclangSerialization ../../lib/libclingUserInterface.a ../../lib/libclingMetaProcessor.a -Wl,--whole-archive ../../lib/libclingInterpreter.a -Wl,--no-whole-archive ../../lib/libclingUtils.a -lclangCodeGen -lclangDriver -lclangFrontend -lclangParse -lclangSema -lclangAnalysis -lclangEdit -lclangRewrite -lclangRewriteFrontend -lclangAST -lclangBasic -lclangLex -lclangSerialization -ldl /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMCoroutines.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMCoverage.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMLTO.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMOption.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMOrcJIT.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMExecutionEngine.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMRuntimeDyld.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMNVPTXCodeGen.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMipo.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMNVPTXDesc.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMNVPTXInfo.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86CodeGen.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMScalarOpts.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMTarget.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMTransformUtils.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMAnalysis.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86AsmParser.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86Desc.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMObject.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMCore.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86Disassembler.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMMC.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMBinaryFormat.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86Info.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMX86Utils.so.9 /gnu/store/1jzp899by0sssssjg75wr78m235xdnha-llvm-9.0.1/lib/libLLVMSupport.so.9
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `llvm::BitstreamCursor::advance(unsigned int)':
(.text._ZN4llvm15BitstreamCursor7advanceEj[_ZN4llvm15BitstreamCursor7advanceEj]+0xa7): undefined reference to `llvm::BitstreamCursor::ReadAbbrevRecord()'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTRecordReader::readRecord(llvm::BitstreamCursor&, unsigned int)':
(.text._ZN5clang15ASTRecordReader10readRecordERN4llvm15BitstreamCursorEj+0x22): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadBlockAbbrevs(llvm::BitstreamCursor&, unsigned int)':
(.text._ZN5clang9ASTReader16ReadBlockAbbrevsERN4llvm15BitstreamCursorEj+0x1e): undefined reference to `llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)'
ld: (.text._ZN5clang9ASTReader16ReadBlockAbbrevsERN4llvm15BitstreamCursorEj+0xe8): undefined reference to `llvm::BitstreamCursor::ReadAbbrevRecord()'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `SkipCursorToBlock(llvm::BitstreamCursor&, unsigned int)':
(.text._ZL17SkipCursorToBlockRN4llvm15BitstreamCursorEj+0x5d): undefined reference to `llvm::BitstreamCursor::skipRecord(unsigned int)'
ld: (.text._ZL17SkipCursorToBlockRN4llvm15BitstreamCursorEj+0x20b): undefined reference to `llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `readASTFileSignature(llvm::StringRef)':
(.text._ZL20readASTFileSignatureN4llvm9StringRefE+0x1b9): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::readUnhashedControlBlockImpl(clang::serialization::ModuleFile*, llvm::StringRef, unsigned int, bool, clang::ASTReaderListener*, bool)':
(.text._ZN5clang9ASTReader28readUnhashedControlBlockImplEPNS_13serialization10ModuleFileEN4llvm9StringRefEjbPNS_17ASTReaderListenerEb+0x237): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::readInputFileInfo(clang::serialization::ModuleFile&, unsigned int)':
(.text._ZN5clang9ASTReader17readInputFileInfoERNS_13serialization10ModuleFileEj+0x143): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::getOriginalSourceFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, clang::FileManager&, clang::PCHContainerReader const&, clang::DiagnosticsEngine&)':
(.text._ZN5clang9ASTReader21getOriginalSourceFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_11FileManagerERKNS_18PCHContainerReaderERNS_17DiagnosticsEngineE+0x472): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadSLocEntry(int)::{lambda(llvm::BitstreamCursor&, llvm::StringRef)#1}::operator()(llvm::BitstreamCursor&, llvm::StringRef) const':
(.text._ZZN5clang9ASTReader13ReadSLocEntryEiENKUlRN4llvm15BitstreamCursorENS1_9StringRefEE_clES3_S4_+0x98): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadSourceManagerBlock(clang::serialization::ModuleFile&)':
(.text._ZN5clang9ASTReader22ReadSourceManagerBlockERNS_13serialization10ModuleFileE+0xb0): undefined reference to `llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)'
ld: (.text._ZN5clang9ASTReader22ReadSourceManagerBlockERNS_13serialization10ModuleFileE+0x14c): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadExtensionBlock(clang::serialization::ModuleFile&)':
(.text._ZN5clang9ASTReader18ReadExtensionBlockERNS_13serialization10ModuleFileE+0xce): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadOptionsBlock(llvm::BitstreamCursor&, unsigned int, bool, clang::ASTReaderListener&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
(.text._ZN5clang9ASTReader16ReadOptionsBlockERN4llvm15BitstreamCursorEjbRNS_17ASTReaderListenerERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x37): undefined reference to `llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)'
ld: (.text._ZN5clang9ASTReader16ReadOptionsBlockERN4llvm15BitstreamCursorEjbRNS_17ASTReaderListenerERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x117): undefined reference to `llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long>&, llvm::StringRef*)'
ld: /gnu/store/cdphqx9ifjzcqrxbmq5ijg6pq3frm9gn-clang-9.0.1/lib/libclangSerialization.a(ASTReader.cpp.o): in function `clang::ASTReader::ReadControlBlock(clang::serialization::ModuleFile&, llvm::SmallVectorImpl<clang::ASTReader::ImportedModule>&, clang::serialization::ModuleFile const*, unsigned int)':
(.text._ZN5clang9ASTReader16ReadControlBlockERNS_13serialization10ModuleFileERN4llvm15SmallVectorImplINS0_14ImportedModuleEEEPKS2_j+0x48): undefined reference to `llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)'
[...]
See ba63aikq9ym2n7gjs13m56hxa77q25-cling-0.9-1.d78d1a0.drv.txt for the complete build log.
Expected behavior
Cling should build successfully.
To Reproduce
- Install Guix following https://guix.gnu.org/manual/en/html_node/Binary-Installation.html.
- Checktout https://gitlab.com/Apteryks/guix/-/commits/cling and build Guix following and http://guix.gnu.org/manual/en/html_node/Building-from-Git.html#Building-from-Git
- From the Guix checkout, run:
./pre-inst-env guix build cling
Setup
- Cling version 0.9, commit d78d1a03fedfd2bf6d2b6ff295aca576d98940df.
- Operating system Guix System
- From sources
Seems adding a link directive for clang-cpp resolves the issue, at least for libcling.
I've done the same for tools/driver and now I got a cling binary, but it fails to run like:
$ /gnu/store/zk5laplbwxncqjr8x3jsfrw73pvn4aly-cling-0.9-1.d78d1a0/bin/cling --help
: CommandLine Error: Option 'disable-symbolication' registered more than once!
LLVM ERROR: inconsistency in registered CommandLine options