List:General Discussion« Previous MessageNext Message »
From:Sasha Pachev Date:March 19 2004 5:30pm
Subject:Re: problems compiling a mysql tool
View as plain text  
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/
Thread
problems compiling a mysql toolJason Unrein17 Mar
  • Re: problems compiling a mysql toolSasha Pachev19 Mar