Spec-Zone .ru
спецификации, руководства, описания, API
|
This section provides guidelines for compiling C programs that use the MySQL C API.
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 installed in /usr/local/mysql/include
, use this option in the compile command:
-I/usr/local/mysql/include
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:
-L/usr/local/mysql/lib -lmysqlclient
The path names may differ on your system. Adjust the -I
and -L
options as necessary.
To make it simpler to compile MySQL programs on Unix, use the mysql_config script. See Section 4.7.2, "mysql_config — Display Options for Compiling Clients".
mysql_config displays the options needed for compiling or linking:
shell>mysql_config --cflags
shell>mysql_config --libs
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:
shell>gcc -c `mysql_config --cflags` progname.c
shell>gcc -o progname progname.o `mysql_config --libs`
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 named 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 in debug mode and uses the static debug C runtime (/MTd
compiler option), it can link to the mysqlclient.lib
static library if that
library was built using the same option. If the client application uses the dynamic C runtime (/MD
option, or /MDd
option in debug mode), it must
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:
In MySQL 5.6, the MySQL client library includes SSL support built in. It is unnecessary to specify either -lssl
or -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
-lmysqlclientdir_path
represents the path name 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. You can include mysql_config output directly in your compile or link command using backticks. For example:
shell> 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, such as 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 don't 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 MySQL Connector/C source distribution and compile the MySQL client library yourself. See Section 2.9, "Installing MySQL from Source", and Section 22.5, "MySQL Connector/C".