Systemd 독립 실행형 바이너리 컴파일 문제

Systemd 독립 실행형 바이너리 컴파일 문제

출처: systemd-stable-251:https://github.com/systemd/systemd-stable

wget https://github.com/systemd/systemd-stable/archive/refs/heads/v251-stable.zip
unzip v251-stable.zip 
cd systemd-stable-251-stable/

사용 명령:

./configure --auto-features=disabled \
            --default-library=static \
            -D standalone-binaries=true \
            -D static-libsystemd=true \
            -D static-libudev=true \
            -D link-udev-shared=false \
            -D link-systemctl-shared=false \
            -D link-networkd-shared=false \
            -D link-timesyncd-shared=false \
            -D link-boot-shared=false && make

또한 정적 라이브러리만 사용하고 독립 실행형 옵션만 활성화해 보았습니다.

구성:

  Features
enabled  : IMA, SELinux, SMACK, blkid, gcrypt, gnutls, libidn2, openssl, p11kit, xkbcommon, xz, zlib, bzip2, backlight, binfmt, coredump, environment.d, efi, firstboot, hibernate, hostnamed, hwdb, initrd, kernel-install, localed, logind, machined, networkd, nss-myhostname, nss-mymachines, nss-resolve, nss-systemd, oomd, portabled, pstore, quotacheck, randomseed, resolve, rfkill, sysext, systemd-analyze, sysusers, timedated, timesyncd, tmpfiles, userdb, vconsole, xdg-autostart, idn, polkit, nscd, dbus, glib, tpm, SysV compat, utmp, ldconfig, adm group, wheel group, gshadow, standalone-binaries, static-libsystemd(true), static-libudev(true), cryptolib(gcrypt), DNS-over-TLS(openssl)
disabled : ACL, AUDIT, AppArmor, PAM, SECCOMP, elfutils, libbpf, libcryptsetup, libcryptsetup-plugins, libcurl, libfdisk, libfido2, libidn, libiptc, microhttpd, pcre2, pwquality, qrencode, tpm2, zstd, lz4, bpf-framework, gnu-efi, homed, importd, repart, sysupdate, legacy-pkla, kmod, man pages, html pages, man page indices, compat-mutable-uid-boundaries, debug hashmap, debug mmap cache, debug siphash, valgrind, trace logging, install tests, link-udev-shared, link-systemctl-shared, link-networkd-shared, link-timesyncd-shared, link-boot-shared, fexecve, coverage

사용자 정의 옵션 auto_features : 비활성화됨 default_library : 정적 link-boot-shared : false link-networkd-shared : false link-systemctl-shared : false link-timesyncd-shared : false link-udev-shared : falsestandalone-binaries : true static -libsystemd: 참 정적 libudev: 참

와 공유 된:

# file build/udevadm
build/udevadm: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=f6b7c1a3509d45ebcafda9b49f4dd2332e786738, with debug_info, not stripped

나는 공유 객체 파일 대신 ELF 실행 파일을 볼 것으로 예상했습니다.

답변1

옵션에 대한 문서는 standalone-binaries다음과 같이 말합니다.

또한 지원되는 바이너리의 독립형 버전을 빌드합니다.

이것은 기껏해야 모호한 것 같습니다. 우리가 찾은 파일 을 살펴보면 다음과 같습니다 meson_build.

        if have_standalone_binaries
                exe = executable(
                        'systemd-sysusers.standalone',

[...]

        if have_standalone_binaries
                exe = executable(
                        'systemd-tmpfiles.standalone',

[...]

이는 이 옵션이 sum에만 영향을 미치고 systemd-sysusers실제로 systemd-tmpfiles빌드가 완료되면 다음을 볼 수 있음을 나타내는 것 같습니다.

$ ls build/*.standalone
build/systemd-sysusers.standalone build/systemd-tmpfiles.standalone

계획대로 일이 진행되고 있는 것 같습니다.

관련 정보