我正在这里撞墙。我正在尝试编译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 {} \;
这可能是因为我需要静态链接所有依赖项,但我无法继续进行。
答案 0 :(得分:1)
查看最后一个发送到终端的链接命令并自行重新运行(手动),将“shared”替换为“static”(Possible to build a shared library with static link used library?)
答案 1 :(得分: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'
这有点像黑客有两个原因:
它对库依赖项进行了硬编码(可能会在其他版本的X中发生变化)
它引入了对libtirpc的奇怪依赖。没有它,我得到了xdrmem_create(3)的未解析符号以及动态链接时libnsl提供的一些其他内容:
/tmp/xorg-server-1.13.0/os/rpcauth.c:79: undefined reference to `xdrmem_create'