2

我在这里用头撞墙。我正在尝试编译 Xvfb 虚拟帧缓冲区的静态链接二进制文件。

http://manpages.ubuntu.com/manpages/natty/man1/Xvfb.1.html

现在我正在像这样从源代码编译:

$ sudo apt-get build-dep xvfb
$ apt-get source Xvfb
$ cd xorg-source
$ ./configure --enable-shared=no
$ make

这仍然会导致编译的二进制文件,但它仍然是动态链接的(我正在使用此命令进行检查)

find -iname Xvfb -type f -exec file {} \;

这可能是因为我需要静态链接所有依赖项,但我无法继续。

4

2 回答 2

1

查看发送到终端的最后一个链接命令并自己(手动)重新运行它,将“shared”替换为“static”(可以使用静态链接使用库构建共享库吗?

于 2013-02-13T02:17:39.880 回答
0

这在 Ubuntu 12.10/amd64 上对我有用:

# be sure to build static versions of all included libraries
$ ./configure --enable-static

$ make

$ cd hw/vfb
$ make clean

# this provides static versions of some functions which are dynamic only in eglibc
$ sudo apt-get install libtirpc-dev

# LDFLAGS=-all-static asks libtool to do static linking
# LD_EXPORT_SYMBOLS_FLAGS= causes --export-dynamic to be omitted
# LIBS='...' fills in missing dependencies for static libraries
$ make LDFLAGS=-all-static LD_EXPORT_SYMBOLS_FLAG= LIBS='-lfreetype -lgpg-error -lfontenc -ltirpc -lz -lbz2 -lm -lrt -lpthread'

这有点像黑客,原因有两个:

  1. 它对库依赖项进行硬编码(在其他版本的 X 中可能会更改)

  2. 它引入了对 libtirpc 的奇怪依赖。没有它,我得到了 xdrmem_create(3) 的未解析符号以及动态链接时 libnsl 提供的其他一些东西:

    /tmp/xorg-server-1.13.0/os/rpcauth.c:79: undefined reference to `xdrmem_create'
    
于 2013-03-18T17:54:21.027 回答