URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7556
[ Назад ]

Исходное сообщение
"проблемы при собрке static"

Отправлено cook , 22-Авг-08 13:39 
сделал простенькую программку использующую мускуль, собрать нужно именно статиком
делаю так

gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include -I/usr/local/include -I/usr/include/mysql -I/usr/local/include/mysql -O2 -g0 -static -MT cron.o -MD -c -o cron.o cron.c
gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include -I/usr/local/include -I/usr/include/mysql -I/usr/local/include/mysql -O2 -g0 -static -MT log.o -MD -c -o log.o log.c

gcc -O2 -g0 -L/usr/lib -L/usr/lib/mysql -L/usr/local/lib -L/usr/local/lib/mysql -static -o cron cron.o log.o -lz -lmysqlclient -lm -lcrypt -lpthread

gcc 4.2.3

имею ошибку
/usr/lib/libmysqlclient.a(my_compress.o): In function `my_uncompress':
(.text+0x65): undefined reference to `uncompress'
/usr/lib/libmysqlclient.a(my_compress.o): In function `my_compress_alloc':
(.text+0x110): undefined reference to `compress'

как это исправить ?


Содержание

Сообщения в этом обсуждении
"проблемы при собрке static"
Отправлено eee , 22-Авг-08 13:49 
>собрать нужно именно статиком

Зачем такие ограничения?

>имею ошибку
>/usr/lib/libmysqlclient.a(my_compress.o): In function `my_uncompress':
>(.text+0x65): undefined reference to `uncompress'
>/usr/lib/libmysqlclient.a(my_compress.o): In function `my_compress_alloc':
>(.text+0x110): undefined reference to `compress'
>
>как это исправить ?

Подключить статическую либу где есть: reference to `uncompress', `compress'.

libmysqlclient.a может быть интерфейс к динамической либе *.so


"проблемы при собрке static"
Отправлено cook , 22-Авг-08 14:43 
прога должна работать на многих местах где непонятно будут ли нужные либы и где, потому статик
>Подключить статическую либу где есть: reference to `uncompress', `compress'.
>
>libmysqlclient.a может быть интерфейс к динамической либе *.so

эта либа подключена, -lz


"проблемы при собрке static"
Отправлено eee , 22-Авг-08 15:08 
>прога должна работать на многих местах где непонятно будут ли нужные либы

Если так то подключать надо ВСЕ статические либы при компиляции,
Линкер не будет вытягивать код из динамической либы и класть в прогу.
На системе без динамических либ может не работать.
Без всяких -fPIC -pipe.


"проблемы при собрке static"
Отправлено eee , 22-Авг-08 16:17 
>эта либа подключена, -lz

У меня это $ls /usr/lib64/liblz*
/usr/lib64/liblzo2.la*  /usr/lib64/liblzo2.so.2@
/usr/lib64/liblzo2.so@  /usr/lib64/liblzo2.so.2.0.0*

Надо что-то подобное -L/usr/lib/liblzo.a


"проблемы при собрке static"
Отправлено cook , 22-Авг-08 17:52 
>У меня это $ls /usr/lib64/liblz*
>/usr/lib64/liblzo2.la*  /usr/lib64/liblzo2.so.2@
>/usr/lib64/liblzo2.so@  /usr/lib64/liblzo2.so.2.0.0*
>
>Надо что-то подобное -L/usr/lib/liblzo.a

у меня это /usr/lib/libz.a

только что попробовал одну штуку, поставил -lz в самом конце, т.е.
gcc -O2 -g0 -L/usr/lib -L/usr/lib/mysql -L/usr/local/lib -L/usr/local/lib/mysql -static -o cron cron.o log.o -lmysqlclient -lm -lcrypt -lpthread -lz
и оно таки собралось...


теперь бы еще эти варнинги побороть
/usr/lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname':
(.text+0x6cc): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/libmysqlclient.a(libmysql.o): In function `read_user_name':
(.text+0x5ed7): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname':
(.text+0x6e1): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/libmysqlclient.a(my_gethostbyname.o): In function `my_gethostbyname_r':
(.text+0x3c): warning: Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/libmysqlclient.a(libmysql.o): In function `mysql_server_init':
(.text+0x695d): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking



"проблемы при собрке static"
Отправлено eee , 22-Авг-08 18:20 
>warning: Using 'getpwnam' in statically linked applications requires at runtime the
>shared libraries from the glibc version used for linking

Оно не будет работать без glibc (libc-2.x.so) другой версии,
как побороть не знаю, но старые на новых должны работать.


"проблемы при собрке static"
Отправлено eee , 22-Авг-08 18:46 
readelf -d prog покажет какие динамические либы нужны.

"проблемы при собрке static"
Отправлено cook , 22-Авг-08 14:56 
попробовал тоже самое сделать на другой машинке с фрей и гсс 3.4.4, теже грабли