Компиляция статического связанного двоичного файла Xvfb


Я трахал мою голову против стены. Я пытаюсь скомпилировать статический связанный двоичный файл виртуального фреймбуффера 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 {} ;

Это, вероятно, потому, что мне нужно статически связать все зависимости, но у меня есть неприятности продолжаются.

2 2

2 ответа:

Это делает трюк для меня на 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'
    

Посмотрите на самую последнюю команду link, выброшенную на терминал, и повторно запустите ее самостоятельно (вручную), заменив "shared" на "static" (Возможно ли построить общую библиотеку со статической используемой библиотекой link?)