Cannot link to Wayland Cursor statically
libdecor's plugins can only be built against the Wayland Cursor library when it is built as a shared library. When attempting to link against a static version of Wayland, there are duplicate symbols due to the symbol os_create_anonymous_file
from the os-compatibility.c
file. This file does in fact, appear to be used directly in the Wayland source code as part of Wayland Cursor as seen here.
This can probably just be fixed by renaming the symbol to avoid the conflict.
The build failure follows below for reference.
[20/22] Linking target src/plugins/cairo/libdecor-cairo.so
FAILED: src/plugins/cairo/libdecor-cairo.so
gcc -o src/plugins/cairo/libdecor-cairo.so src/plugins/cairo/libdecor-cairo.so.p/libdecor-cairo.c.o -Wl,--as-needed -Wl,--allow-shlib-undefined -fuse-ld=lld -shared -fPIC '-Wl,-rpath,$ORIGIN/../..' -Wl,-rpath-link,/var/home/jordan/.conan/data/libdecor/0.2.2/_/_/build/3cb4d819a66b3b9cf0f9aae728fb8e4ca13ae175/build-debug/src -Wl,--start-group src/plugins/common/libcairo-blur.a src/libdecor-0.so.0.200.2 src/libcursor_settings.a src/libos_compatibility.a /home/jordan/.conan/data/wayland/1.22.0/_/_/package/08f92034dbe2eadcc2ba5e1572fc30c1960cce50/lib/libwayland-client.a -lpthread -lm -lrt /home/jordan/.conan/data/libffi/3.4.4/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libffi.a /home/jordan/.conan/data/pango/1.50.10/_/_/package/377e10f5e7283dd4dabb179ddf25ff0f9dc1d4d6/lib/libpangocairo-1.0.a /home/jordan/.conan/data/pango/1.50.10/_/_/package/377e10f5e7283dd4dabb179ddf25ff0f9dc1d4d6/lib/libpangoft2-1.0.a /home/jordan/.conan/data/pango/1.50.10/_/_/package/377e10f5e7283dd4dabb179ddf25ff0f9dc1d4d6/lib/libpango-1.0.a /home/jordan/.conan/data/fribidi/1.0.12/_/_/package/32ea08eb41751d3f940e9e39ad015b3c02ca05ea/lib/libfribidi.a /home/jordan/.conan/data/harfbuzz/5.1.0/_/_/package/fd1c7ff4aae36da8dc2db7bf3dd5ab0bd485e570/lib/libharfbuzz.a /usr/lib/gcc/x86_64-redhat-linux/13/libstdc++.so /home/jordan/.conan/data/glib/2.78.1/_/_/package/de052e20f63ec712c7be716f9ea7e98c8ddb5642/lib/libgthread-2.0.a /home/jordan/.conan/data/libelf/0.8.13/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libelf.a /home/jordan/.conan/data/glib/2.78.1/_/_/package/de052e20f63ec712c7be716f9ea7e98c8ddb5642/lib/libgio-2.0.a /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libresolv.so /home/jordan/.conan/data/glib/2.78.1/_/_/package/de052e20f63ec712c7be716f9ea7e98c8ddb5642/lib/libgobject-2.0.a -Wl,--export-dynamic /home/jordan/.conan/data/glib/2.78.1/_/_/package/de052e20f63ec712c7be716f9ea7e98c8ddb5642/lib/libgmodule-2.0.a /home/jordan/.conan/data/glib/2.78.1/_/_/package/de052e20f63ec712c7be716f9ea7e98c8ddb5642/lib/libglib-2.0.a /home/jordan/.conan/data/libmount/2.39/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libmount.a /home/jordan/.conan/data/libmount/2.39/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libblkid.a /home/jordan/.conan/data/libselinux/3.5/_/_/package/718d010e8cc86a570d0881ec3002af0f1a71038a/lib/libselinux.a /home/jordan/.conan/data/libselinux/3.5/_/_/package/718d010e8cc86a570d0881ec3002af0f1a71038a/lib/libsepol.a /home/jordan/.conan/data/pcre2/10.42/_/_/package/1d4a86eaf7b2e3d09b68f49c41e54fbf72048324/lib/libpcre2-posix.a /home/jordan/.conan/data/pcre2/10.42/_/_/package/1d4a86eaf7b2e3d09b68f49c41e54fbf72048324/lib/libpcre2-8.a /home/jordan/.conan/data/pcre2/10.42/_/_/package/1d4a86eaf7b2e3d09b68f49c41e54fbf72048324/lib/libpcre2-16.a /home/jordan/.conan/data/pcre2/10.42/_/_/package/1d4a86eaf7b2e3d09b68f49c41e54fbf72048324/lib/libpcre2-32.a /home/jordan/.conan/data/libxft/2.3.4/_/_/package/c2e826becf267b813ddd91d60842289de8d399cb/lib/libXft.a /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libfontenc.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libICE.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXau.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXaw7.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXcomposite.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXcursor.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXdamage.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXdmcp.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXfixes.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXi.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXinerama.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxkbfile.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXmu.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXmuu.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXpm.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXrandr.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXRes.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXss.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXt.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXtst.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXv.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXxf86vm.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-xkb.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-icccm.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-image.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-keysyms.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-randr.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-render-util.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-shape.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-sync.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-xfixes.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-xinerama.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-util.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-dri3.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-cursor.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libSM.so /home/jordan/.conan/data/cairo/1.18.0/_/_/package/753cfca565a3615cb695ef56d0f477f4d4ce4cec/lib/libcairo.a -ldl /home/jordan/.conan/data/lzo/2.10/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/liblzo2.a /home/jordan/.conan/data/fontconfig/2.14.2/_/_/package/3eb52b99a7b4205e8815fbf4ca43fd08011897c3/lib/libfontconfig.a /home/jordan/.conan/data/expat/2.5.0/_/_/package/87ebb0aa4071225bc5dc19a41a702ae3e97c138c/lib/libexpat.a /home/jordan/.conan/data/util-linux-libuuid/2.39.2/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libuuid.a /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-shm.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXrender.so /home/jordan/.conan/data/pixman/0.42.2/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libpixman-1.a /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libXext.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libX11-xcb.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libX11.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb-render.so /usr/lib/gcc/x86_64-redhat-linux/13/../../../../lib64/libxcb.so /home/jordan/.conan/data/freetype/2.13.2/_/_/package/ec50bf54f7a54a7d1d34d6683d499c823b44b48a/lib/libfreetyped.a /home/jordan/.conan/data/libpng/1.6.40/_/_/package/05a17715830b54f464784ac4bc2bfbdf1ed7872a/lib/libpng.a /home/jordan/.conan/data/zlib/1.3/_/_/package/c7f8f27fa9761600bad14659c72ce8738106ecca/lib/libz.a /home/jordan/.conan/data/bzip2/1.0.8/_/_/package/b4c431515b1ad2ed14c003bef8f1bb07bfbec872/lib/libbz2.a /home/jordan/.conan/data/brotli/1.1.0/_/_/package/2219a46ad4332b3c8eb6c70048a9ebc8847f9012/lib/libbrotlidec.a /home/jordan/.conan/data/brotli/1.1.0/_/_/package/2219a46ad4332b3c8eb6c70048a9ebc8847f9012/lib/libbrotlienc.a /home/jordan/.conan/data/brotli/1.1.0/_/_/package/2219a46ad4332b3c8eb6c70048a9ebc8847f9012/lib/libbrotlicommon.a /home/jordan/.conan/data/wayland/1.22.0/_/_/package/08f92034dbe2eadcc2ba5e1572fc30c1960cce50/lib/libwayland-cursor.a /home/jordan/.conan/data/dbus/1.15.8/_/_/package/01e58fc852afa3fd5047c9fb16ac058f1c19aeb2/lib/libdbus-1.a -Wl,--end-group
ld.lld: error: duplicate symbol: os_create_anonymous_file
>>> defined at os-compatibility.c:152 (../src/src/os-compatibility.c:152)
>>> libos_compatibility.a.p/os-compatibility.c.o:(os_create_anonymous_file) in archive src/libos_compatibility.a
>>> defined at os-compatibility.c:119 (../src/cursor/os-compatibility.c:119)
>>> os-compatibility.c.o:(.text+0x37) in archive /home/jordan/.conan/data/wayland/1.22.0/_/_/package/08f92034dbe2eadcc2ba5e1572fc30c1960cce50/lib/libwayland-cursor.a