X11链接问题可能与Musc libc有关

问题描述

我正在使用musl libc运行Alpine Linux,尝试安装-
https://github.com/patrickhaller/no-wm/
with-
make install
我已经安装了musl-dev和libx11-dev。
libx11-dev将库放在/ usr / lib中,而不放在/ usr / X11 / lib中。参见-
https://pkgs.alpinelinux.org/contents?branch=edge&name=libx11-dev&arch=x86&repo=main
因此我将Makefile行更改为-
X11LIB = -lX11 -L/usr/lib/
我确认libX11.so在该目录位置。

但是我的安装仍然失败,并显示以下输出-

$ make install
gcc -O2 -Wall -std=c99 -pedantic -lX11 -L/usr/lib/ x-alt-tab-mru.c -o x-alt-tab-mru
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: /tmp/cckobJdo.o: in function `x_alt_tab':
x-alt-tab-mru.c:(.text+0x70): undefined reference to `XGetWMHints'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0x84): undefined reference to `XGetwindowAttributes'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0xec): undefined reference to `XLowerWindow'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0xf8): undefined reference to `XRaiseWindow'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0x10c): undefined reference to `XSetInputFocus'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0x11c): undefined reference to `XRestackWindows'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text+0x128): undefined reference to `XSync'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: /tmp/cckobJdo.o: in function `main':
x-alt-tab-mru.c:(.text.startup+0x34): undefined reference to `XOpendisplay'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text.startup+0x44): undefined reference to `XSync'
/usr/lib/gcc/aarch64-alpine-linux-musl/10.2.0/../../../../aarch64-alpine-linux-musl/bin/ld: x-alt-tab-mru.c:(.text.startup+0x70): undefined reference to `XQueryTree'
collect2: error: ld returned 1 exit status
make: *** [Makefile:19: x-alt-tab-mru] Error 1

我已经确认x-alt-tab-mru.c文件中的标头存在于正确的位置,并包含在libx11-dev中。

接下来我该如何解决此问题并进行编译?我已经追逐了所有想念的东西。

解决方法

链接命令行上的参数顺序很重要。 sync选项仅适用于搜索稍后在命令行上指定的库,并且至少对于静态链接,要链接的对象中的一个对象中的未定义符号仅针对稍后在命令行上指定的其他对象来解析。链接共享库时,行为可能会(或可能不会)有所不同,但为安全起见,应始终根据要依赖的对象对要链接的对象(源文件,对象文件和库)进行排序。

那么,

  • 万一您完全需要-L的情况下,应该在-L/usr/lib之前出现,并且
  • -lX11选项应在链接命令中的 -lX11之后出现。