2

我编译了原始的 cwm tgz 包(不是 netbsd 包)

./configure
make

可以正常工作。启动 cwm 后

./cwm

错误

Shared object "libX11.so.7" not found

出现。ldd 输出为:

    -lXft.2 => /usr/pkg/lib/libXft.so.2
    -lfontconfig.1 => /usr/pkg/lib/libfontconfig.so.1
    -lfreetype.7 => /usr/X11R7/lib/libfreetype.so.7
    -lz.1 => /usr/lib/libz.so.1
    -lgcc_s.1 => /usr/lib/libgcc_s.so.1
    -lc.12 => /usr/lib/libc.so.12
    -lbz2.1 => /usr/lib/libbz2.so.1
    -lexpat.2 => /usr/lib/libexpat.so.2
    -lXrender.2 => /usr/X11R7/lib/libXrender.so.2
    -lXext.7 => /usr/X11R7/lib/libXext.so.7
    -lX11.7 => /usr/X11R7/lib/libX11.so.7
    -lxcb.1 => /usr/X11R7/lib/libxcb.so.1
    -lXau.7 => /usr/X11R7/lib/libXau.so.7
    -lXdmcp.7 => /usr/X11R7/lib/libXdmcp.so.7
    -lX11.7 => not found
    -lXext.7 => not found

其中“未找到”直接指的是 cwm 二进制文件。它已与命令链接

gcc -Wall -Icompat -D_REENTRANT -I/usr/pkg/include\
  -I/usr/X11R7/include/freetype2 -I/usr/X11R7/include\
  -I/usr/X11R7/include/freetype2 -I/usr/X11R7/include -g -O2\
  -I/usr/X11R7/include   -o cwm  calmwm.o draw.o screen.o  xmalloc.o\
  client.o grab.o search.o util.o xutil.o conf.o  input.o xevents.o\
  group.o  geographic.o kbfunc.o cursor.o  font.o -L/usr/pkg/lib\
  -Wl,-R/usr/pkg/lib -lXft -L/usr/X11R7/lib -lX11 -lXext

所以链接器应该找到 libX11 和 libXext。

装载机为什么会抱怨?

4

1 回答 1

2

显而易见的部分是在链接时加载程序命令行中没有包含“-Wl,-R/usr/X11R7/lib”。

NetBSD 的运行时加载器 (/libexec/ld.elf_so) 只编译了运行时库搜索路径 ``/lib:/usr/lib'',因此任何需要在搜索路径上添加额外元素的可执行文件都需要在编译时显式添加它们时间。(如 /usr/pkg/lib 的条目。)

于 2014-01-22T19:38:30.487 回答