NixOS / nix

Nix, the purely functional package manager
https://nixos.org/
GNU Lesser General Public License v2.1
11.45k stars 1.44k forks source link

problems linking nix-2.2x on Fedora: undefined reference to `TLS init function for nix::unix::interruptCheck' #10952

Open juhp opened 1 week ago

juhp commented 1 week ago

Describe the bug

I am having trouble building nix >= 2.20 on Fedora (Rawhide).

Steps To Reproduce

Try to build latest nix on Fedora:

  1. git clone https://github.com/juhp/nix-fedora
  2. cd nix-fedora
  3. update spec file to 2.23.0 and add BuildRequires: libgit2-devel
  4. Also update gc to 8.2.6
  5. Building rpm errors:
:
src/libutil/ref.hh:35:21: note: remove the ‘< >’
g++ -o /var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/libnixstore.so -shared -L/usr/lib64 -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes  -Wl,--no-copy-dt-needed-entries src/libstore/binary-cache-store.o src/libstore/build-result.o src/libstore/build/derivation-goal.o src/libstore/build/drv-output-substitution-goal.o src/libstore/build/entry-points.o src/libstore/build/goal.o src/libstore/build/substitution-goal.o src/libstore/build/worker.o src/libstore/builtins/buildenv.o src/libstore/builtins/fetchurl.o src/libstore/builtins/unpack-channel.o src/libstore/common-protocol.o src/libstore/content-address.o src/libstore/daemon.o src/libstore/derivations.o src/libstore/derived-path-map.o src/libstore/derived-path.o src/libstore/downstream-placeholder.o src/libstore/dummy-store.o src/libstore/export-import.o src/libstore/filetransfer.o src/libstore/gc.o src/libstore/globals.o src/libstore/http-binary-cache-store.o src/libstore/indirect-root-store.o src/libstore/keys.o src/libstore/legacy-ssh-store.o src/libstore/linux/personality.o src/libstore/local-binary-cache-store.o src/libstore/local-fs-store.o src/libstore/local-overlay-store.o src/libstore/local-store.o src/libstore/log-store.o src/libstore/machines.o src/libstore/make-content-addressed.o src/libstore/misc.o src/libstore/names.o src/libstore/nar-accessor.o src/libstore/nar-info-disk-cache.o src/libstore/nar-info.o src/libstore/optimise-store.o src/libstore/outputs-spec.o src/libstore/parsed-derivations.o src/libstore/path-info.o src/libstore/path-references.o src/libstore/path-with-outputs.o src/libstore/path.o src/libstore/pathlocks.o src/libstore/posix-fs-canonicalise.o src/libstore/profiles.o src/libstore/realisation.o src/libstore/remote-fs-accessor.o src/libstore/remote-store.o src/libstore/s3-binary-cache-store.o src/libstore/serve-protocol-connection.o src/libstore/serve-protocol.o src/libstore/sqlite.o src/libstore/ssh-store-config.o src/libstore/ssh-store.o src/libstore/ssh.o src/libstore/store-api.o src/libstore/store-reference.o src/libstore/uds-remote-store.o src/libstore/unix/build/child.o src/libstore/unix/build/hook-instance.o src/libstore/unix/build/local-derivation-goal.o src/libstore/unix/pathlocks.o src/libstore/unix/user-lock.o src/libstore/worker-protocol-connection.o src/libstore/worker-protocol.o -lsqlite3 -lcurl -pthread -ldl -lseccomp -Wl,-z,defs -Wl,-soname=libnixstore.so   -Wl,-rpath,/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libutil -Lsrc/libutil -lnixutil 
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::checkInterrupt()':
/usr/include/c++/14/bits/atomic_base.h:501:(.text+0x17b7): undefined reference to `nix::unix::_isInterrupted'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::checkInterrupt()':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libutil/unix/signals-impl.hh:90:(.text+0x17da): undefined reference to `TLS init function for nix::unix::interruptCheck'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::checkInterrupt()':
/usr/include/c++/14/bits/std_function.h:247:(.text+0x17e1): undefined reference to `nix::unix::interruptCheck'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o:/usr/include/c++/14/bits/std_function.h:247:(.text+0x17e5): undefined reference to `nix::unix::interruptCheck'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::checkInterrupt()':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libutil/unix/signals-impl.hh:90:(.text+0x17fb): undefined reference to `TLS init function for nix::unix::interruptCheck'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::BinaryCacheStore(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:33:(.text+0x1c7c): undefined reference to `nix::SecretKey::SecretKey(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::BinaryCacheStore(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)':
/usr/include/c++/14/bits/unique_ptr.h:1076:(.text+0x1c94): undefined reference to `nix::LocalSigner::LocalSigner(nix::SecretKey&&)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::BinaryCacheStore(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:33:(.text+0x1e67): undefined reference to `nix::SecretKey::SecretKey(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::BinaryCacheStore(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)':
/usr/include/c++/14/bits/unique_ptr.h:1076:(.text+0x1e7f): undefined reference to `nix::LocalSigner::LocalSigner(nix::SecretKey&&)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::addToStoreCommon(nix::Source&, nix::RepairFlag, nix::CheckSigsFlag, std::function<nix::ValidPathInfo (std::pair<nix::Hash, unsigned long>)>)':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:134:(.text+0x827d): undefined reference to `nix::AutoDelete::AutoDelete(std::filesystem::__cxx11::path const&, bool)'
/usr/bin/ld: /var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:141:(.text+0x82b8): undefined reference to `nix::HashSink::HashSink(nix::HashAlgorithm)'
/usr/bin/ld: /var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:143:(.text+0x82de): undefined reference to `nix::HashSink::HashSink(nix::HashAlgorithm)'
/usr/bin/ld: /var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:231:(.text+0x95a8): undefined reference to `nix::CanonPath::operator/(std::basic_string_view<char, std::char_traits<char> >) const'
/usr/bin/ld: /var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:238:(.text+0x96cc): undefined reference to `nix::CanonPath::operator/(std::basic_string_view<char, std::char_traits<char> >) const'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::addToStoreFromDump(nix::Source&, std::basic_string_view<char, std::char_traits<char> >, nix::FileSerialisationMethod, nix::ContentAddressMethod, nix::HashAlgorithm, std::set<nix::StorePath, std::less<nix::StorePath>, std::allocator<nix::StorePath> > const&, nix::RepairFlag)':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:323:(.text+0xa18c): undefined reference to `nix::hashString(nix::HashAlgorithm, std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::BinaryCacheStore::addToStore(std::basic_string_view<char, std::char_traits<char> >, nix::SourcePath const&, nix::ContentAddressMethod, nix::HashAlgorithm, std::set<nix::StorePath, std::less<nix::StorePath>, std::allocator<nix::StorePath> > const&, std::function<bool (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, nix::RepairFlag)':
/var/home/petersen/copr/nix/BUILD/nix-2.23.0-build/nix-2.23.0/src/libstore/binary-cache-store.cc:457:(.text+0xa2f4): undefined reference to `nix::hashPath(nix::SourcePath const&, nix::FileIngestionMethod, nix::HashAlgorithm, std::function<bool (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&)'
/usr/bin/ld: /var/home/petersen/tmp/cczhWoHK.ltrans0.ltrans.o: in function `nix::checkInterrupt()':
:

Though others have succeeded to build current nix with aws-sdk-cpp for Fedora, so it is possible, but I don't understand what I am missing?

Expected behavior

rpmbuild of nix to succeed without errors.