MySQL : C API

昨日のあれは必要なヘッダーをインクルードしていなかったことが原因だった。
あとでまた困ったときのために、エラーメッセージとか貼っておく。

/usr/include/mysql/m_ctype.h:287: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/mysql/m_ctype.h:290: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/mysql/m_ctype.h:295: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/mysql/m_ctype.h:298: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_lengthsp_8bit’
/usr/include/mysql/m_ctype.h:300: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_instr_simple’
/usr/include/mysql/m_ctype.h:309: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_caseup_8bit’
/usr/include/mysql/m_ctype.h:311: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_casedn_8bit’
/usr/include/mysql/m_ctype.h:316: error: expected declaration specifiers or ‘...’ before ‘ulong’
/usr/include/mysql/m_ctype.h:316: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/mysql/m_ctype.h:317: error: expected declaration specifiers or ‘...’ before ‘ulong’
/usr/include/mysql/m_ctype.h:317: error: expected declaration specifiers or ‘...’ before ‘uchar’
/usr/include/mysql/m_ctype.h:317: error: expected declaration specifiers or ‘...’ before ‘uchar’
/usr/include/mysql/m_ctype.h:319: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_scan_8bit’

このへんは、#include <my_global>が抜けていたため。

mysql.c:8: error: ‘MYSQL’ undeclared (first use in this function)
mysql.c:8: error: (Each undeclared identifier is reported only once
mysql.c:8: error: for each function it appears in.)
mysql.c:8: error: ‘conn’ undeclared (first use in this function)
mysql.c:9: error: ‘MYSQL_RES’ undeclared (first use in this function)
mysql.c:9: error: ‘res’ undeclared (first use in this function)
mysql.c:10: error: ‘MYSQL_FIELD’ undeclared (first use in this function)
mysql.c:10: error: ‘fields’ undeclared (first use in this function)

これは、#include <mysql.h>が抜けていたため。

mysql.c:(.text+0x39): undefined reference to `mysql_init'
mysql.c:(.text+0x89): undefined reference to `mysql_real_connect'
mysql.c:(.text+0xa9): undefined reference to `mysql_query'
mysql.c:(.text+0xbc): undefined reference to `mysql_use_result'
mysql.c:(.text+0xd4): undefined reference to `mysql_num_fields'
mysql.c:(.text+0xe2): undefined reference to `mysql_fetch_fields'
mysql.c:(.text+0x12e): undefined reference to `mysql_free_result'
mysql.c:(.text+0x139): undefined reference to `mysql_close'
mysql.c:(.text+0x15b): undefined reference to `mysql_close'

これは、#include <my_sys.h>が抜けていたため。
以上3つのヘッダーをインクルードして、次のコマンドでコンパイルする。

gcc -I /usr/include/mysql -lmysqlclient mysql_test.c -o mysql_test