сделал простенькую программку использующую мускуль, собрать нужно именно статиком
делаю так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.cgcc -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'как это исправить ?
>собрать нужно именно статикомЗачем такие ограничения?
>имею ошибку
>/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
прога должна работать на многих местах где непонятно будут ли нужные либы и где, потому статик
>Подключить статическую либу где есть: reference to `uncompress', `compress'.
>
>libmysqlclient.a может быть интерфейс к динамической либе *.soэта либа подключена, -lz
>прога должна работать на многих местах где непонятно будут ли нужные либыЕсли так то подключать надо ВСЕ статические либы при компиляции,
Линкер не будет вытягивать код из динамической либы и класть в прогу.
На системе без динамических либ может не работать.
Без всяких -fPIC -pipe.
>эта либа подключена, -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
>У меня это $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
>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) другой версии,
как побороть не знаю, но старые на новых должны работать.
readelf -d prog покажет какие динамические либы нужны.
попробовал тоже самое сделать на другой машинке с фрей и гсс 3.4.4, теже грабли