1 line
7 KiB
Plaintext
1 line
7 KiB
Plaintext
<!-- SC_OFF --><div class="md"><p>Hi,</p> <p>I noticed a really bizarre issue with the linking system and thought to ask if anyone has any ideas.</p> <p>Setup:</p> <pre><code>gcc - 11.1.0 ldd - 2.33 linux - 5.15.6-arch2-1 </code></pre> <p><code>pipewire-jack-dropin</code> has been installed to prioritize Pipewire's JACK libraries during loading, thus JACK clients will automatically connect to Pipewire.</p> <p>It does so by dumping a <code>.conf</code> file with Pipewire's path in <code>/etc/ld.so.conf.d</code>.</p> <p>This was working fine since i switched to Pipewire.</p> <p>However, recently, some applications have started to throw errors and complaining about a missing server. After a bit of digging, it turns out that they load JACK2 <code>libjack.so</code> and thus they can't connect to Pipewire.</p> <p><code>mpv v0.34</code></p> <pre><code>~ ldd /usr/bin/mpv | grep jack libjack.so.0 => /usr/lib/libjack.so.0 (0x00007f0c43fb3000) </code></pre> <p>If i downgrade the version, it works fine:</p> <p><code>mpv v0.33</code></p> <pre><code>~ ldd /usr/bin/mpv | grep jack libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007ff1bbea8000) </code></pre> <p>It seems that setting <code>LD_LIBRARY_PATH</code> manually, still works:</p> <p><code>mpv v0.34</code></p> <pre><code>LD_LIBRARY_PATH=/usr/lib/pipewire-0.3/jack ldd /usr/bin/mpv | grep jack libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f6172da9000) </code></pre> <p>I've also manually removed <code>/etc/ld.so.cache</code>, rebuild it, rebooted, verified that the pipewire path is in the file and it's still loading <code>/usr/lib/libjack.so</code>.</p> <p>Is there a compile flag that can ignore <code>ld.so.conf</code>? Or some runtime feature that can prevent it from working correctly?</p> <p>EDIT:</p> <p>Attached below is the <code>LD_DEBUG</code> output for the different test:</p> <p><code>mpv v0.34</code></p> <pre><code> file=libjack.so.0 [0]; needed by /usr/bin/mpv [0] find library=libjack.so.0 [0]; searching search path=/usr/lib (system search path) trying file=/usr/lib/libjack.so.0 </code></pre> <p><code>mpv v0.34</code> (with <code>LD_LIBRARY_PATH</code> set)</p> <pre><code> file=libjack.so.0 [0]; needed by /usr/bin/mpv [0] find library=libjack.so.0 [0]; searching search path=/usr/lib/pipewire-0.3/jack (LD_LIBRARY_PATH) trying file=/usr/lib/pipewire-0.3/jack/libjack.so.0 </code></pre> <p><code>mpv v0.33</code></p> <pre><code> file=libjack.so.0 [0]; needed by /usr/bin/mpv [0] find library=libjack.so.0 [0]; searching search cache=/etc/ld.so.cache trying file=/usr/lib/pipewire-0.3/jack/libjack.so.0 </code></pre> <p>EDIT:</p> <p>The following is <code>strace</code> of the two versions:</p> <p><code>mpv v0.34</code></p> <pre><code>execve("/usr/bin/mpv", ["mpv", "/tmp/audio.wav"...], 0x7fff756de778 /* XX vars */) = 0 brk(NULL) = 0x559d01f68000 arch_prctl(0x3001 /* ARCH_??? */, 0x7fff56fe2250) = -1 EINVAL (Invalid argument) access("/etc/ld.so.preload", R_OK) = 0 openat(AT_FDCWD, "/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=32, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x7fd602473000 close(3) = 0 munmap(0x7fd602473000, 32) = 0 openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/tls/x86_64/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/tls/x86_64/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/tls/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/tls/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/tls/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/tls/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/tls/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/tls", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/x86_64/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/x86_64/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/x86_64/libavutil.so.56", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) newfstatat(AT_FDCWD, "/usr/lib/x86_64", 0x7fff56fe1490, 0) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/libavutil.so.56", O_RDONLY|O_CLOEXEC) = 3 </code></pre> <p><code>mpv v0.33</code></p> <pre><code>execve("/usr/bin/mpv", ["mpv", "/tmp/audio.wav"...], 0x7ffe22e3fc68 /* XX vars */) = 0 brk(NULL) = 0x565061abb000 arch_prctl(0x3001 /* ARCH_??? */, 0x7fff8eb8ba50) = -1 EINVAL (Invalid argument) access("/etc/ld.so.preload", R_OK) = 0 openat(AT_FDCWD, "/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=32, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x7f7458e7c000 close(3) = 0 munmap(0x7f7458e7c000, 32) = 0 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=228512, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 228512, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7458e45000 close(3) = 0 openat(AT_FDCWD, "/usr/lib/libasound.so.2", O_RDONLY|O_CLOEXEC) = 3 </code></pre> <p>The newer version (<code>v0.34</code>) seems to load <code>/etc/ld.so.cache</code> eventually, but after quite a few of the libraries have been loaded. While with <code>v0.33</code>, the second file that's loaded is <code>/etc/ld.so.cache</code>.</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/A78BECAFB33DD95"> /u/A78BECAFB33DD95 </a> <br/> <span><a href="https://www.reddit.com/r/archlinux/comments/ra3dqh/pipewire_jack_and_ldsoconf_result_in_inconsistent/">[link]</a></span>   <span><a href="https://www.reddit.com/r/archlinux/comments/ra3dqh/pipewire_jack_and_ldsoconf_result_in_inconsistent/">[comments]</a></span> |