zig icon indicating copy to clipboard operation
zig copied to clipboard

linking issues while building from source in MSYS2

Open ognevny opened this issue 1 year ago • 9 comments

Zig Version

0.12.0-dev.1773+8a8fd47d21

Steps to Reproduce and Observed Behavior

use this build script and run makepkg-mingw -s. succesfull build is excepted

Expected Behavior

ld.lld: error: undefined symbol: compressBound
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::compress(llvm::compression::Params, llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&))
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zlib::compress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, int))
  
  ld.lld: error: undefined symbol: compress2
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::compress(llvm::compression::Params, llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&))
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zlib::compress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, int))
  
  ld.lld: error: undefined symbol: ZSTD_compressBound
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::compress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, int))
  
  ld.lld: error: undefined symbol: ZSTD_compress
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::compress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, int))
  
  ld.lld: error: undefined symbol: ZSTD_isError
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::compress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, int))
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::decompress(llvm::ArrayRef<unsigned char>, unsigned char*, unsigned long long&))
  
  ld.lld: error: undefined symbol: uncompress
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::decompress(llvm::DebugCompressionType, llvm::ArrayRef<unsigned char>, unsigned char*, unsigned long long))
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zlib::decompress(llvm::ArrayRef<unsigned char>, unsigned char*, unsigned long long&))
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zlib::decompress(llvm::ArrayRef<unsigned char>, llvm::SmallVectorImpl<unsigned char>&, unsigned long long))
  
  ld.lld: error: undefined symbol: ZSTD_decompress
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::decompress(llvm::ArrayRef<unsigned char>, unsigned char*, unsigned long long&))
  
  ld.lld: error: undefined symbol: ZSTD_getErrorName
  >>> referenced by libLLVMSupport.a(Compression.cpp.obj):(llvm::compression::zstd::decompress(llvm::ArrayRef<unsigned char>, unsigned char*, unsigned long long&))
  
  ld.lld: error: undefined symbol: adler32_combine
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: ZSTD_createCCtx
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: ZSTD_CCtx_setParameter
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: ZSTD_CStreamInSize
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: ZSTD_compressStream2
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: ZSTD_freeCCtx
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>())
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>())
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: adler32
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false>>()::'lambda'(unsigned long long)::operator()(unsigned long long) const)
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false>>()::'lambda'(unsigned long long)::operator()(unsigned long long) const)
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true>>()::'lambda'(unsigned long long)::operator()(unsigned long long) const)
  >>> referenced 1 more times
  
  ld.lld: error: undefined symbol: deflateInit2_
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(deflateShard(llvm::ArrayRef<unsigned char>, int, int))
  
  ld.lld: error: undefined symbol: deflate
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(deflateShard(llvm::ArrayRef<unsigned char>, int, int))
  
  ld.lld: error: undefined symbol: deflateEnd
  >>> referenced by liblldELF.a(OutputSections.cpp.obj):(deflateShard(llvm::ArrayRef<unsigned char>, int, int))
  
  ld.lld: error: undefined symbol: crc32
  >>> referenced by libLLVMSupport.a(CRC.cpp.obj):(llvm::crc32(unsigned int, llvm::ArrayRef<unsigned char>))
  >>> referenced by libLLVMSupport.a(CRC.cpp.obj):(llvm::crc32(llvm::ArrayRef<unsigned char>))
  >>> referenced by libLLVMSupport.a(CRC.cpp.obj):(llvm::JamCRC::update(llvm::ArrayRef<unsigned char>))
  
  ld.lld: error: undefined symbol: __declspec(dllimport) xmlFreeDoc
  >>> referenced by libLLVMWindowsManifest.a(WindowsManifestMerger.cpp.obj):(llvm::windows_manifest::WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl())
  >>> referenced by libLLVMWindowsManifest.a(WindowsManifestMerger.cpp.obj):(llvm::windows_manifest::WindowsManifestMerger::WindowsManifestMergerImpl::getMergedManifest())
  >>> referenced by libLLVMWindowsManifest.a(WindowsManifestMerger.cpp.obj):(llvm::windows_manifest::WindowsManifestMerger::~WindowsManifestMerger())

edit: current working on applying different changes to build config

ognevny avatar Dec 04 '23 03:12 ognevny

this is a different one than https://github.com/ziglang/zig/issues/12985 was

ognevny avatar Dec 04 '23 04:12 ognevny

update: recieving different errors while static compiling

ognevny avatar Dec 04 '23 13:12 ognevny

Just ran into this myself on linux. This seems to be because it's linking against the static liblld* libraries without also checking their dependencies and linking against them (in this case zlib and zstd).

vimproved avatar Mar 22 '24 17:03 vimproved

Just ran into this myself on linux. This seems to be because it's linking against the static liblld* libraries without also checking their dependencies and linking against them (in this case zlib and zstd).

so it wants some symbols from static libraries but there are none of them in msys2 libraries?

ognevny avatar Mar 22 '24 17:03 ognevny

so it wants some symbols from static libraries but there are none of them in msys2 libraries?

The static LLD libraries use symbols from zlib/zstd, but since zig's build system isn't linking against them they're undefined.

vimproved avatar Mar 22 '24 17:03 vimproved

The static LLD libraries use symbols from zlib/zstd, but since zig's build system isn't linking against them they're undefined.

ok. so the issue from zig side. thanks a lot for this investigation

ognevny avatar Mar 22 '24 17:03 ognevny

have you tried cmake options:

-DZIG_STATIC_ZLIB=ON
-DZIG_STATIC_ZSTD=ON

mikdusan avatar Mar 22 '24 18:03 mikdusan

have you tried cmake options:

-DZIG_STATIC_ZLIB=ON
-DZIG_STATIC_ZSTD=ON

I don't remember actually... but I remember that I tried static llvm. but now it's not impossible for msys, as we have upgraded to llvm 18, which is not supported by zig

ognevny avatar Mar 22 '24 18:03 ognevny

have you tried cmake options:

-DZIG_STATIC_ZLIB=ON
-DZIG_STATIC_ZSTD=ON

For distro packaging purposes, I need to link these dynamically.

vimproved avatar Mar 23 '24 17:03 vimproved