cygwinでmysql c apiでデータベースに接続する詳細
2917 ワード
一、典型的なエラー:
エラー1:
コマンド:
gcc -I/usr/include/mysql/-L/lib/-lmysqlclient main.c
エラー:/tmp/cct 0 KqUQ.o:main.c:(.text+0x2a): undefined reference to `mysql_init'/tmp/ccT0KqUQ.o:main.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mysql_init'/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld:/tmp/ccT0KqUQ.o: bad reloc address 0x0 in section `.pdata'/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: final link failed: Invalid operation collect2: error: ld returned 1 exit status
分析:
娘よ、私はどうして-I,-L,-lこれらのオプションを最后に置くことを知っていますか??次のように変更します.
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
エラー2:
コマンド:
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
エラー:
collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
分析:
君は自分でmysqlから来たと思う.comからダウンロードしたconnector.申し訳ありませんが、cygwinで提供しなければなりません.方法は次のとおりです.
1.cygwinのsetupを開く.exe、next、select packagesページに着くまで
2.libmysqlの検索
3.Database Defaultノードを開き、「libmysqlclient-devel」、「libmysqlclient 18」を選択します.
4.インストール
二、具体的な流れ
1./root/src/test/main.c
2.コンパイル&リンク
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
3.運転
エラー1:
コマンド:
gcc -I/usr/include/mysql/-L/lib/-lmysqlclient main.c
エラー:/tmp/cct 0 KqUQ.o:main.c:(.text+0x2a): undefined reference to `mysql_init'/tmp/ccT0KqUQ.o:main.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mysql_init'/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld:/tmp/ccT0KqUQ.o: bad reloc address 0x0 in section `.pdata'/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: final link failed: Invalid operation collect2: error: ld returned 1 exit status
分析:
娘よ、私はどうして-I,-L,-lこれらのオプションを最后に置くことを知っていますか??次のように変更します.
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
エラー2:
コマンド:
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
エラー:
collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
分析:
君は自分でmysqlから来たと思う.comからダウンロードしたconnector.申し訳ありませんが、cygwinで提供しなければなりません.方法は次のとおりです.
1.cygwinのsetupを開く.exe、next、select packagesページに着くまで
2.libmysqlの検索
3.Database Defaultノードを開き、「libmysqlclient-devel」、「libmysqlclient 18」を選択します.
4.インストール
二、具体的な流れ
1./root/src/test/main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mysql.h"
void halt(MYSQL*, const char*);
int main(int argc, char*argv[]) {
MYSQL mysql;
// mysql
if(!mysql_init(&mysql))
{
halt(&mysql, "Mysql init failed");
}
//
if(!mysql_real_connect(&mysql, "127.0.0.1", "root", "123456", "test", 3306, "", 0))
{
halt(&mysql, "Can't connect to mysql server");
}
//
if(0 != mysql_set_character_set(&mysql, "utf8")) {
halt(&mysql, "Can't set character");
}
// test
const char* sql = "SHOW TABLES";
if(0 != mysql_real_query(&mysql, sql, strlen(sql))) {
char message[200];
sprintf(message, "Query Error:%s", sql);
halt(&mysql, message);
}
//
MYSQL_RES* res = NULL;
if(!(res = mysql_use_result(&mysql))) {
halt(&mysql, "Can't fetch result");
}
//
MYSQL_ROW row;
while(row = mysql_fetch_row(res)) {
printf("table:%s
", row[0]);
}
//
mysql_free_result(res);
//
mysql_close(&mysql);
return 0;
}
void halt(MYSQL* mysql, const char* message) {
fprintf(stderr, "message: %s
errno:%d
error:%s", message, mysql_errno(mysql), mysql_error(mysql));
exit(-1);
}
2.コンパイル&リンク
gcc main.c -I/usr/include/mysql/-L/lib/-lmysqlclient
3.運転