zig
zig copied to clipboard
linking issues while building from source in MSYS2
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
this is a different one than https://github.com/ziglang/zig/issues/12985 was
update: recieving different errors while static compiling
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).
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?
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.
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
have you tried cmake options:
-DZIG_STATIC_ZLIB=ON
-DZIG_STATIC_ZSTD=ON
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
have you tried cmake options:
-DZIG_STATIC_ZLIB=ON -DZIG_STATIC_ZSTD=ON
For distro packaging purposes, I need to link these dynamically.