This section provides guidelines for compiling C programs that use the MySQL C API.
The examples here use gcc as the compiler. A different compiler might be appropriate on some systems (for example, clang on OS X or FreeBSD, or Sun Studio on Solaris). Adjust the examples as necessary.
You may need to specify an
-I option when you
compile client programs that use MySQL header files, so that the
compiler can find them. For example, if the header files are
this option in the compile command:
MySQL clients must be linked using the
-lmysqlclient option in the link command. You
may also need to specify a
-L option to tell
the linker where to find the library. For example, if the
library is installed in
/usr/local/mysql/lib, use these options in
the link command:
The path names may differ on your system. Adjust the
-L options as
To make it simpler to compile MySQL programs on Unix, use the mysql_config script. See Section 4.7.1, “mysql_config — Display Options for Compiling Clients”.
mysql_config displays the options needed for compiling or linking:
You can run those commands to get the proper options and add them manually to compilation or link commands. Alternatively, include the output from mysql_config directly within command lines using backticks:
gcc -c `mysql_config --cflags` progname.cshell>
gcc -o progname progname.o `mysql_config --libs`
On Unix, linking uses dynamic libraries by default. To link to
the static client library instead, add its path name to the link
command. For example, if the library is located in
/usr/local/mysql/lib, link like this:
gcc -o progname progname.o /usr/local/mysql/lib/libmysqlclient.a
Or use mysql_config to provide the library name:
gcc -o progname progname.o `mysql_config --variable=pkglibdir`/libmysqlclient.a
mysql_config does not currently provide a way
to list all libraries needed for static linking, so it might be
necessary to name additional libraries on the link command (for
-lnsl -lsocket on Solaris). To get
an idea which libraries to add, use mysql_config
--libs and ldd libmysqlclient.so
(or otool -L libmysqlclient.dylib on OS X).
As of MySQL 5.7.9, pkg-config can be used as an alternative to mysql_config for obtaining information such as compiler flags or link libraries required to compile MySQL applications. For example, the following pairs of commands are equivalent:
mysql_config --cflags pkg-config --cflags mysqlclient mysql_config --libs pkg-config --libs mysqlclient
To produce flags for static linking, use this command:
pkg-config --static --libs mysqlclient
For more information, see Section 184.108.40.206, “Building C API Client Programs Using pkg-config”.
To specify header and library file locations, use the facilities provided by your development environment.
To build C API clients on Windows, you must link in the C client library, as well as the Windows ws2_32 sockets library and Secur32 security library.
On Windows, you can link your code with either the dynamic or
static C client library. The static library is named
mysqlclient.lib and the dynamic library is
libmysql.dll. In addition, the
libmysql.lib static import library is
needed for using the dynamic library.
If you link with the static library, failure can occur unless these conditions are satisfied:
The client application must be compiled with the same version of Visual Studio used to compile the library.
The client application should link the C runtime statically
by using the
/MT compiler option.
If the client application is built in debug mode and uses the
static debug C runtime (
option), it can link to the
static library if that library was built using the same option.
If the client application uses the dynamic C runtime
/MD option, or
option in debug mode), it must be linked to the
libmysql.dll dynamic library. It cannot
link to the static client library.
The MSDN page describing the link options can be found here: http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
In MySQL 5.7, the MySQL client library includes SSL
support built in. It is unnecessary to specify either
-lcrypto at link
time. Doing so may in fact result in problems at runtime.
If the linker cannot find 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+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
-L at the end of your link command, where
dir_path represents the path name of
the directory where the client library is located. To determine
the correct directory, try this command:
The output from mysql_config might indicate other libraries that should be specified on the link command as well. You can include mysql_config output directly in your compile or link command using backticks. For example:
gcc -o progname progname.o `mysql_config --libs`
If an error occurs at link time that the
floor symbol is undefined, link to the math
library by adding
-lm to the end of the
compile/link line. Similarly, if you get undefined-reference
errors for other functions that should exist on your system,
connect(), check the manual page for
the function in question to determine which libraries you should
add to the link command.
If you get undefined-reference errors such as the following for functions that do not exist on your system, it usually means that your MySQL client library was compiled on a system that is not 100% compatible with yours:
mf_format.o(.text+0x201): undefined reference to `__lxstat'
In this case, you should download the latest MySQL or Connector/C source distribution and compile the MySQL client library yourself. See Section 2.8, “Installing MySQL from Source”, and MySQL Connector/C Developer Guide.