From: Date: March 19 2004 6:30pm Subject: Re: problems compiling a mysql tool List-Archive: http://lists.mysql.com/mysql/162113 Message-Id: <405B2E27.6010802@surveyz.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jason Unrein wrote: > Before I start, this is a compile problem (or so I > think) and from what little I read in this forum, it > looks ok to post. If not and you know the proper place > to post, please let me know. Now for the good > stuff.... > > I'm attempting to write a simple tool in C that needs > to be compiled statically with mysql client support. > It needs this (correct me if I'm wrong in what I say) > because it will be used on the majority of Redhat'S > and SuSE's OSes. Instead of compiling for each one of > their glibc's and requiring that the mysql shared > libraries are installed, I want to compile it once, > statically for all of them (excluding the x86_64 and > ia64). > > When I run > ---------------------------------------------------------------- > CC = gcc > CFLAGS = -O2 -Wall -static > ALL: > gcc -O2 -Wall -static -o logger scsiInquiry.o sg_err.o > sgScan.o logger.o /usr/lib/mysql/libmysqlclient.a > ---------------------------------------------------------------- > > I get the following > -------------------------------------------------------------- > /usr/lib/mysql/libmysqlclient.a(mf_pack.o)(.text+0x9ac): > In function `expand_tilde': > : Using 'getpwnam' in statically linked applications > requires at runtime the shared libraries from the > glibc version used for linking > /usr/lib/mysql/libmysqlclient.a(libmysql.o)(.text+0x7a7): > In function `read_user_name': > : Using 'getpwuid' in statically linked applications > requires at runtime the shared libraries from the > glibc version used for linking > /usr/lib/mysql/libmysqlclient.a(mf_pack.o)(.text+0x9b9): > In function `expand_tilde': > : Using 'endpwent' in statically linked applications > requir.... > ---------------------------------------------------------------- Jason: I share with your your dislike of shared libraries. I guess some people have a hard time with the idea that you may want to compile a binary and have it just run everywhere with no fuss :-) To make a long story short, the easiest way to solve the problem, as it seems to me - get MySQL source CXX=gcc CC=gcc ./configure --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --prefix=/opt/my-own-mysql make make install Then compile with -I/opt/my-own-mysql/include/mysql and link with -L/opt/my-own-mysql/lib -static -lmysqlclient -lz -lm For machines with an incompatible libc gethostbyname() will fail when you call mysql_real_connect(), so just use IP addresses instead of host names. There is a solution that works around this problem, but it requires a libc patch. -- Sasha Pachev Create online surveys at http://www.surveyz.com/