A.3.1. Problems Linking to the MySQL Client Library
When you are linking an application program to use the MySQL
client library, you might get undefined reference errors for
symbols that start with mysql_
, such as those
shown here:
/tmp/ccFKsdPa.o: In function `main':
/tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init'
/tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error'
/tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'
You should be able to solve this problem by adding
-Ldir_path -lmysqlclient
at the end of your
link command, where dir_path
represents the
pathname of the directory where the client library is located.
To determine the correct directory, try this command:
shell> mysql_config --libs
The output from mysql_config might indicate
other libraries that should be specified on the link command as
well.
If you get undefined reference
errors for the
uncompress
or compress
function, add -lz
to the end of your link
command and try again.
If you get undefined reference
errors for a
function that should exist on your system, such as
connect
, check the manual page for the
function in question to determine which libraries you should add
to the link command.
You might get undefined reference
errors such
as the following for functions that don't exist on your system:
mf_format.o(.text+0x201): undefined reference to `__lxstat'
This usually means that your MySQL client library was compiled
on a system that is not 100% compatible with yours. In this
case, you should download the latest MySQL source distribution
and compile MySQL yourself. See
Section 2.8, “MySQL Installation Using a Source Distribution”.
You might get undefined reference errors at runtime when you try
to execute a MySQL program. If these errors specify symbols that
start with mysql_
or indicate that the
mysqlclient
library can't be found, it means
that your system can't find the shared
libmysqlclient.so
library. The fix for this
is to tell your system to search for shared libraries where the
library is located. Use whichever of the following methods is
appropriate for your system:
Add the path to the directory where
libmysqlclient.so
is located to the
LD_LIBRARY_PATH
environment variable.
Add the path to the directory where
libmysqlclient.so
is located to the
LD_LIBRARY
environment variable.
Copy libmysqlclient.so
to some
directory that is searched by your system, such as
/lib
, and update the shared library
information by executing ldconfig
.
Another way to solve this problem is by linking your program
statically with the -static
option, or by
removing the dynamic MySQL libraries before linking your code.
Before trying the second method, you should be sure that no
other programs are using the dynamic libraries.