LINUX.ORG.RU

как сделать чисто статический бинарник? -static не помогает


0

0

имеется прога. её нужно перенести на тачку без gcc.
вот такой makefile
...
CC                      = gcc
CFLAGS          = -Wall -g 
LDOPTS          = -lpthread -lpcap
PT_OBJS         = ptunnel.o md5.o
prefix          = /usr
bindir          = $(prefix)/bin
mandir          = $(prefix)/share/man/man8
...
получаемый из него бинарник на другой тачке требует libcap.so (причём почему-то 0.8.3).

Пробовал исправить положение так:
...
CC                      = gcc
CFLAGS          = -Wall -g -static-libgcc
LDOPTS          = -lpthread -lpcap -static -static-libgcc
PT_OBJS         = ptunnel.o md5.o
prefix          = /usr
bindir          = $(prefix)/bin
mandir          = $(prefix)/share/man/man8
...

при линковке выдаёт варнинги:

gcc -Wall -g -static-libgcc -MM *.c > .depend
gcc -Wall -g -static-libgcc -c -o ptunnel.o ptunnel.c
gcc -Wall -g -static-libgcc -c -o md5.o md5.c
gcc -o ptunnel ptunnel.o md5.o -lpthread -lpcap -static  -static-libgcc
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../libpcap.a(nametoaddr.o)(.text+0x
a4): In function `pcap_nametoaddrinfo':
: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
ptunnel.o(.text+0xa59): In function `pt_forwarder':
/home/x/tmp/PingTunnel/ptunnel.c:281: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../libpcap.a(nametoaddr.o)(.text+0x
d3): In function `pcap_nametonetaddr':
: warning: Using 'getnetbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../libpcap.a(nametoaddr.o)(.text+0x
1bd): In function `pcap_nametoproto':
: warning: Using 'getprotobyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../libpcap.a(nametoaddr.o)(.text+0x
10d): In function `pcap_nametoport':
: warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

при попытке запустить на второй тачке - 

Too old kernel
Segmentation Fault

Как прогу можно слинковать так, чтоб уж точно ничего не просила? Пох на размер, не до хорошего уже

забыл добавить. если есть способ притащить с бинарником libcap - сойдёт и так.

LowLevel
() автор топика
Ответ на: комментарий от LowLevel

Блин, написано же в сообщениях, что не в libpcap дело... Хоть бы сообщения об ошибках читали, то-ли...

anonymous
()
Ответ на: комментарий от anonymous

спасибо, но читать я умею. в отличии от вас похоже. прилинковать libpcap я смог, вопрос - как можно сделать статический бинарник независимый от ядра.

кстати если принести на вторую систему к зашаренному бинарнику libpcap, последний всё равно требует glibc версии старше чем имеется. новый glibc перенести не проблема, но как его разместить, чтоб и систему не порушить и прога заработала?

LowLevel
() автор топика
Ответ на: комментарий от fghj

угу. а то я такой дурак. то есть я конечно в С дурак, но это тоже пробовал. ВНИМАТЕЛЬНО читаем топик

LowLevel
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.