Исполняемый файл, который не требует никакой библиотеки, даже libc? - PullRequest
2 голосов
/ 14 июля 2011
[root@ gwan]# file gwan 
gwan: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
[root@ gwan]# ldd gwan 
    not a dynamic executable

[root@ gwan]# du -csh gwan 
208K    gwan
208K    total

Как Гван делает магию?

Будучи веб-сервером, он должен выполнять программирование сокетов и выполнять множество других тяжелых работ, которые требуют соединения с libc, но, похоже, с gwan это не так. Как это возможно?

Ответы [ 4 ]

5 голосов
/ 11 октября 2011

Как обычно это не волшебство, GWAN упакован с UPX, чтобы выглядеть меньше, экономя около 200 КБ. Распаковка приводит к следующему.

 > ldd gwan
 linux-gate.so.1 =>  (0xf770c000)
 libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf76e9000)
 librt.so.1 => /usr/lib32/librt.so.1 (0xf76e0000)
 libdl.so.2 => /usr/lib32/libdl.so.2 (0xf76db000)
 libm.so.6 => /usr/lib32/libm.so.6 (0xf76b1000)
 libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7695000)
 libc.so.6 => /usr/lib32/libc.so.6 (0xf752c000)
 /lib/ld-linux.so.2 (0xf770d000)
2 голосов
/ 18 июля 2012

Nginx

  • 0 родной скриптовый язык для генерации динамического содержимого
  • нет расширенного нативного API
  • 2.7 MB след

G-WAN

  • 5 собственных скриптовых языков для генерации динамического содержимого
  • богатый собственный API (JSON, GIF I / O, хранилище KV, 2D примитивы буфера кадров, диаграммы, электронная почта, сжатие, шифрование и т. Д.)
  • < 1 MB след

Там, где находится " волшебство ", похоже, дело вкуса, а не разума.

2 голосов
/ 14 июля 2011

Как сказано в выводе file, он статически связан, т. Е. У него весь соответствующий код извлечен из библиотек и включен в исполняемый файл.Это "жестко закодировано".

1 голос
/ 15 марта 2012

Учитывая присутствие других серверов приложений - большинство из них просто поддерживают один язык сценариев - определенно есть "волшебство" в том, что G-WAN (150 КБ) поддерживает C, C ++, Objective-C, Dи Java.

G-WAN и 64-битный OpenJDK / SUN_JVM в Linux занимают всего 20 мБ ОЗУ, после загружаются все примеры приложений.

Онипо-видимому, внимательно следите за использованием памяти, так как ее объем записывается в файл gwan.log при запуске.

...