X11 链接问题可能与 musl libc 相关
X11 linking issue potentially musl libc related
我是 运行 Alpine Linux,正在尝试安装 musl libc-
https://github.com/patrickhaller/no-wm/
与-
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
我已经确认 headers x-alt-tab-mru.c 文件存在于正确的位置并且包含在 libx11-dev 中。
接下来我该怎么做才能解决这个问题并让它编译?我已经把我能想到的都追完了..
link 命令行中参数的顺序很重要。 -L
选项仅适用于搜索稍后在命令行中指定的库,并且至少对于静态 linking,正在 linked 的一个对象中的未定义符号仅针对稍后在命令行中指定的其他对象。 linking 共享库时,行为可能(或可能不会)略有不同,但为了安全起见,您应该始终根据 linked 命令对象(源文件、目标文件和库)到他们的依赖。
那么,特别是
- 万一您根本需要
-L/usr/lib
,它应该在 -lX11
之前,并且
-lX11
选项应该出现在 link 命令中 x-alt-tab-mru.c
之后。
我是 运行 Alpine Linux,正在尝试安装 musl libc-
https://github.com/patrickhaller/no-wm/
与-
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
我已经确认 headers x-alt-tab-mru.c 文件存在于正确的位置并且包含在 libx11-dev 中。
接下来我该怎么做才能解决这个问题并让它编译?我已经把我能想到的都追完了..
link 命令行中参数的顺序很重要。 -L
选项仅适用于搜索稍后在命令行中指定的库,并且至少对于静态 linking,正在 linked 的一个对象中的未定义符号仅针对稍后在命令行中指定的其他对象。 linking 共享库时,行为可能(或可能不会)略有不同,但为了安全起见,您应该始终根据 linked 命令对象(源文件、目标文件和库)到他们的依赖。
那么,特别是
- 万一您根本需要
-L/usr/lib
,它应该在-lX11
之前,并且 -lX11
选项应该出现在 link 命令中x-alt-tab-mru.c
之后。