2013-09-19 3 views
0

cblog.c:Не удается скомпилировать простую программу MySQL

#include "html.h" 
#include "config.h" 
#include <mysql/mysql.h> 
//#include <my_global.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
     MYSQL *conn; 
     MYSQL_RES *res; 
     MYSQL_ROW row; 

     conn = mysql_init(NULL); 

     // Connect to database 
     if (!msyql_real_connect(conn, server, username, password, database, 0, NULL, 0)) { 
       fprintf(stderr, "%s\n", mysql_error(conn)); 
       exit(1); 
     } 

     // Query the DB 
     if (mysql_query(conn, "show tables")) { 
       fprintf(stderr, "%s\n", mysql_error(conn)); 
       exit(1); 
     } 
     res = mysql_use_result(conn); 

     htmlf("MySQL Tables in mysql database:\n"); 
     while ((row = mysql_fetch_row(res)) != NULL) 
       htmlf("%s \n", row[0]); 

     mysql_free_result(res); 
     mysql_close(conn); 

     html("Hello World!"); 
     return 0; 
} 

Makefile:

all: 
#  gcc -Wall cblog.c html.c -o cblog `mysql_config --cflags --libs` 
#  gcc -Wall cblog.c html.c -L/usr/lib -lmysqlclient -o cblog 
     gcc cblog.c html.c -Wall $(shell mysql_config --cflags) -o cblog $(shell mysql_config --libs) 
test: all 
     ./cblog 

Выход:

ttouch cblog$ make 
gcc cblog.c html.c -g -Wall -I/usr/include/mysql -fPIC -pipe -fstack-protector --param=ssp-buffer-size=4 -fno-strict-aliasing -DBIG_JOINS=1 -fomit-frame-pointer -g -DNDEBUG -o cblog -L/usr/lib -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl 
cblog.c: In function ‘main’: 
cblog.c:16:2: warning: implicit declaration of function ‘msyql_real_connect’ [-Wimplicit-function-declaration] 
    if (!msyql_real_connect(conn, server, username, password, database, 0, NULL, 0)) { 
^
/tmp/ccs1WQsi.o: In function `main': 
/media/files/Lab/cblog/cblog.c:16: undefined reference to `msyql_real_connect' 
collect2: error: ld returned 1 exit status 
make: *** [all] Error 1 

Я знаю, что этот вопрос был дан ответ более тысячи раз, Я искал по всему Интернету, я тестировал установку mysql_config в начале или в конце. Я знаю, что она дает правильные пути (проверенные)

ls /usr/lib/ | grep mysql:

libmysqlclient.a 
libmysqlclient_r.a 
libmysqlclient_r.so 
libmysqlclient_r.so.18 
libmysqlclient_r.so.18.0.0 
libmysqlclient.so 
libmysqlclient.so.18 
libmysqlclient.so.18.0.0 
libmysqld.a 
libmysqld.so 
libmysqld.so.18 
libmysqlservices.a 
mysql 
tdbcmysql1.0.0 

ls /usr/include/mysql | grep mysql:

mysql_com.h 
mysqld_ername.h 
mysqld_error.h 
mysql_embed.h 
mysql.h 
mysql_time.h 
mysql_version.h 

Извините за noobish вопрос, но я стучал головой около 4 -5 часов

+0

Если вы посмотрите в заголовочных файлах MYSQL, вы видите определение для 'msyql_real_connect()'? Если вы это сделаете, вы можете попробовать отредактировать файл ... Поместите в него директиву '# error', чтобы убедиться, что это файл, на который вы смотрите, который входит в комплект ... вы также можете попробовать использовать' nm ', чтобы посмотреть на символы, определенные в файле библиотеки, чтобы проверить, существует ли там символ. Если это так, попробуйте временно переименовать файл, чтобы убедиться, что он связан с ... надеюсь, что это поможет :) – Jimbo

+0

Спасибо, человек. Оказалось, что это просто опечатка, но вы дали полезную информацию (я - noob) для отладки функций. Спасибо! :) – dzervas

ответ

3

У вас есть опечатка в имени функции, msyql_real_connect должно быть mysql_real_connect

+0

* ударяет головой по клавиатуре до тех пор, пока она не сломается * 4 часа отправился в хлам ... – dzervas

Смежные вопросы