3.2 Создание приложений-клиентов C API
В этом разделе приведены рекомендации по компиляции программ на C, использующих MySQL C API.
Компиляция клиентов MySQL на Unix
В этих примерах используется gcc в качестве компилятора. На некоторых системах может быть уместен другой компилятор (например, clang на macOS или FreeBSD, или Sun Studio на Solaris). Необходимо внести соответствующие коррективы в примеры.
При компиляции клиентских программ, использующих заголовочные файлы MySQL, возможно, потребуется указать опцию -I, чтобы компилятор мог их найти. Например, если заголовочные файлы установлены в /usr/local/mysql/include, используйте эту опцию в команде компиляции:
-I/usr/local/mysql/include
Вы можете связать свой код либо с динамической, либо со статической библиотекой клиентов MySQL на C. Имя динамической библиотеки — libmysqlclient, а суффикс отличается в зависимости от платформы (например, .so для Linux, .dylib для macOS). Статическая библиотека называется libmysqlclient.a на всех платформах.
Клиенты MySQL должны быть связаны с помощью опции -lmysqlclient в команде компиляции. Также может потребоваться указать опцию -L, чтобы сообщить компоновщику, где найти библиотеку. Например, если библиотека установлена в /usr/local/mysql/lib, используйте эти опции в команде компиляции:
-L/usr/local/mysql/lib -lmysqlclient
Имена путей могут отличаться на вашей системе. Необходимо скорректировать опции -I и -L по мере необходимости.
Для упрощения компиляции программ MySQL на Unix используйте скрипт mysql_config. См. ...
mysql_config отображает опции, необходимые для компиляции или компоновки:
mysql_config --cflags
mysql_config --libs
Вы можете выполнить эти команды в командной строке, чтобы получить соответствующие опции и добавить их вручную в команды компиляции или компоновки. В качестве альтернативы включите вывод из mysql_config напрямую в командных строках, используя обратные кавычки:
gcc -c `mysql_config --cflags` progname.c
gcc -o progname progname.o `mysql_config --libs`
На Unix динамические библиотеки используются по умолчанию для компоновки. Чтобы вместо этого использовать статическую библиотеку клиентов, добавьте ее имя файла в команду компоновки. Например, если библиотека расположена в /usr/local/mysql/lib, связывайте так:
gcc -o progname progname.o /usr/local/mysql/lib/libmysqlclient.a
Или используйте mysql_config для указания пути к библиотеке:
gcc -o progname progname.o `mysql_config --variable=pkglibdir`/libmysqlclient.a
mysql_config в настоящее время не предоставляет способ перечисления всех библиотек, необходимых для статической компоновки, поэтому может потребоваться указать дополнительные библиотеки в команде компоновки (например, -lnsl -lsocket на Solaris). Чтобы понять, какие библиотеки добавить, используйте mysql_config --libs и ldd libmysqlclient.so (или otool -L libmysqlclient.dylib на macOS).
pkg-config может использоваться как альтернатива mysql_config для получения информации, такой как флаги компилятора или библиотеки компоновки, необходимые для компиляции приложений MySQL. Например, следующие пары команд эквивалентны:
mysql_config --cflags
pkg-config --cflags mysqlclient
mysql_config --libs
pkg-config --libs mysqlclient
Чтобы получить флаги для статической компоновки, используйте эту команду:
pkg-config --static --libs mysqlclient
Дополнительную информацию см. в Разделе 3.3, «Создание приложений-клиентов C API с использованием pkg-config».
Компиляция клиентов MySQL на Microsoft Windows
Для указания расположения файлов заголовков и библиотек используйте средства вашей среды разработки.
Для построения клиентов C API на Windows необходимо связать библиотеку клиентов C, а также библиотеки сокетов Windows ws2_32 и библиотеку безопасности Secur32.
Вы можете связать свой код либо с динамической, либо со статической библиотекой клиентов MySQL на C:
Динамическая библиотека называется
libmysql.dll. Кроме того, для использования динамической библиотеки требуется статическая импортирующая библиотекаlibmysql.lib.Статическая библиотека называется
mysqlclient.lib. Для связи со статической библиотекой клиентов C приложение клиента должно быть скомпилировано с той же версией Visual Studio, которая использовалась для компиляции библиотеки клиентов C (для статической библиотеки клиентов C, созданной Oracle, это Visual Studio 2015).
При использовании библиотеки клиентов MySQL на C, созданной Oracle, следуйте этим правилам при связывании времени выполнения C для приложения клиента:
-
Для библиотеки клиентов MySQL на C из дистрибутива MySQL Community:
Всегда связывайте динамически с временем выполнения C (используйте опцию компилятора
/MD), независимо от того, используете ли вы статическую или динамическую библиотеку клиентов C. Кроме того, хосты, на которых работает клиентское приложение, должны иметь установленный Visual C++ Redistributable для Visual Studio 2015.
-
Для библиотеки клиентов MySQL на C из коммерческого дистрибутива MySQL:
Если вы связываетесь со статической библиотекой клиентов C, связывайте статически с временем выполнения C (используйте опцию компилятора
/MT).Если вы связываетесь с динамической библиотекой клиентов C, связывайте либо статически, либо динамически с временем выполнения C (используйте опцию компилятора либо
/MT, либо/MD).
В общем случае, при связывании со статической библиотекой клиентов MySQL на C, библиотека клиентов и приложение клиента должны использовать одинаковые опции компилятора при связывании времени выполнения C — то есть, если ваша библиотека клиентов C скомпилирована с опцией /MT, ваше приложение клиента также должно быть скомпилировано с опцией /MT и так далее (см. страницу MSDN, описывающую опции компоновки библиотек C для получения дополнительной информации). Следуйте этому правилу, когда создаете собственную статическую библиотеку клиентов MySQL на C из дистрибутива исходных кодов MySQL и связываете с ней приложение клиента.
Режим отладки: Из-за этого правила связывания невозможно создать приложение в режиме отладки (с опцией компилятора /MTd или /MDd) и связать его со статической библиотекой клиентов C, созданной Oracle, которая не создана с опциями отладки. Вместо этого необходимо создать статическую библиотеку клиентов из исходных кодов с опциями отладки.
Устранение проблем при связывании с библиотекой клиентов MySQL
Библиотека клиентов MySQL включает встроенную поддержку SSL. Необходимо указывать ни -lssl, ни -lcrypto во время компоновки. В противном случае могут возникнуть проблемы при запуске.
Если компоновщик не может найти библиотеку клиентов MySQL, могут возникнуть ошибки undefined reference для символов, начинающихся с mysql_, как показано ниже:
/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'
Вы можете решить эту проблему, добавив -L в конец команды компоновки, где dir_path
-lmysqlclientdir_path обозначает путь к каталогу, где расположена библиотека клиентов. Чтобы определить правильный каталог, попробуйте выполнить эту команду:
mysql_config --libs
Вывод mysql_config может указать и другие библиотеки, которые также должны быть указаны в команде компоновки. Вы можете включить вывод mysql_config непосредственно в свою команду компиляции или компоновки, используя обратные кавычки. Например:
gcc -o progname progname.o `mysql_config --libs`
Если при компоновке возникает ошибка, что символ floor не определен, подключитесь к библиотеке математических функций, добавив -lm в конец строки компиляции/компоновки. Аналогично, если у вас возникают ошибки undefined reference для других функций, которые должны существовать на вашей системе, таких как connect(), обратитесь к справочной странице по соответствующей функции, чтобы определить, какие библиотеки нужно добавить в команду компоновки.
Если у вас возникают ошибки undefined reference для функций, которые не существуют на вашей системе, как показано ниже, это обычно означает, что ваша библиотека клиентов MySQL была скомпилирована на системе, которая не полностью совместима с вашей:
mf_format.o(.text+0x201): undefined reference to `__lxstat'
В этом случае необходимо загрузить дистрибутив исходных кодов последней версии MySQL и скомпилировать библиотеку клиентов MySQL самостоятельно. См. ...
© 2025 Oracle
Licensed under the GPLv2 License.