Spec-Zone .ru
спецификации, руководства, описания, API

21.8.4.1. Здание C Клиентские Программы API

Этот раздел обеспечивает направляющие линии для того, чтобы они скомпилировали программы C, которые используют API MySQL C.

Компиляция MySQL Clients on Unix

Вы, возможно, должны определить -I опция, когда Вы компилируете клиентские программы, которые используют заголовочные файлы MySQL, так, чтобы компилятор мог найти их. Например, если заголовочные файлы устанавливаются в /usr/local/mysql/include, используйте эту опцию в команде компиляции:

-I/usr/local/mysql/include

Клиенты MySQL должны быть соединены, используя -lmysqlclient опция в команде ссылки. Вы, возможно, также должны определить a -L опция, чтобы сказать компоновщику, где найти библиотеку. Например, если библиотека устанавливается в /usr/local/mysql/lib, используйте эти опции в команде ссылки:

-L/usr/local/mysql/lib -lmysqlclient

Пути могут разойтись в Вашей системе. Корректируйтесь -I и -L опции по мере необходимости.

Чтобы сделать более простым скомпилировать программы MySQL на Unix, используйте mysql_config сценарий. См. Раздел 4.7.2, "mysql_config — Параметры экрана для Компиляции Клиентов".

mysql_config выводит на экран опции, необходимые для компиляции или соединения:

shell> mysql_config --cflagsshell> mysql_config --libs

Можно выполнить те команды, чтобы получить надлежащие опции и добавить их вручную к командам ссылки или компиляции. Альтернативно, включайте вывод от mysql_config непосредственно в пределах командных строк, используя обратные галочки:

shell> gcc -c `mysql_config --cflags`
        progname.cshell> gcc -o progname progname.o `mysql_config
        --libs`

Компиляция MySQL Clients на Microsoft Windows

Чтобы определить заголовок и расположение файлов библиотеки, используйте услуги, предоставленные Вашей средой разработки.

Чтобы создать клиенты API C на Windows, следует соединиться в клиентской библиотеке C, так же как Windows ws2_32 снабжает сокетом библиотеку и библиотеку безопасности Secur32.

На Windows можно соединить свой код или с динамической или со статической клиентской библиотекой C. Статическую библиотеку называют mysqlclient.lib и динамическую библиотеку называют libmysql.dll. Кроме того, libmysql.lib статическая библиотека импорта необходима для того, чтобы пользоваться динамической библиотекой.

Если Вы соединяетесь со статической библиотекой, отказ может произойти, если эти условия не удовлетворяются:

Если клиентское приложение встраивается в режиме отладки и использует статическую отладку C время выполнения (/MTd опция компилятора), это может соединиться с mysqlclient.lib статическая библиотека, если та библиотека была создана, используя ту же самую опцию. Если клиентское приложение использует динамическое время выполнения C (/MD опция, или /MDd опция в режиме отладки), это должно, должен быть соединен с libmysql.dll динамическая библиотека. Это не может соединиться со статической клиентской библиотекой.

Страница MSDN, описывающая опции ссылки, может быть найдена здесь: http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx

Поиск и устранение неисправностей проблем, Соединяющихся с MySQL Client Library

В MySQL 5.7 клиентская библиотека MySQL включает встроенную поддержку SSL. Является ненужным определить также -lssl или -lcrypto во время ссылки. Выполнение так может фактически привести к проблемам во времени выполнения.

Если компоновщик не может найти клиентскую библиотеку MySQL, Вы могли бы получить ошибки неопределенной ссылки для символов, которые запускаются с 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'

Следует быть в состоянии решить эту проблему, добавляя -Ldir_path -lmysqlclient в конце Вашей команды ссылки, где dir_path представляет путь каталога, где клиентская библиотека располагается. Чтобы определить корректный каталог, попробуйте эту команду:

shell> mysql_config --libs

Вывод от mysql_config мог бы указать на другие библиотеки, которые должны быть определены на команде ссылки также. Можно включать вывод mysql_config непосредственно в Вашу компиляцию или соединить команду, используя обратные галочки. Например:

shell> gcc -o progname progname.o `mysql_config
        --libs`

Если ошибка происходит во время ссылки когда floor символ неопределен, ссылка к математической библиотеке, добавляя -lm до конца строки компиляции/ссылки. Точно так же, если Вы получаете ошибки неопределенной ссылки для других функций, которые должны существовать на Вашей системе, такой как connect(), проверьте страницу руководства на рассматриваемую функцию, чтобы определить, какие библиотеки следует добавить к команде ссылки.

Если Вы получаете ошибки неопределенной ссылки, такие как следующее для функций, которые не существуют на Вашей системе, это обычно означает, что Ваша клиентская библиотека MySQL была скомпилирована на системе, которая не является на 100 % совместимой с Вашей:

mf_format.o(.text+0x201): undefined reference to `__lxstat'

В этом случае следует загрузить последний MySQL или MySQL исходное распределение Connector/C и скомпилировать клиентскую библиотеку MySQL самостоятельно. См. Раздел 2.9, "Устанавливая MySQL из Источника", и Раздел 21.5, "MySQL, Connector/C".