Решено: Си.makefile.mysql (Не компилируется...)

Модератор: Модераторы разделов

fe120
Сообщения: 16

Решено: Си.makefile.mysql

Сообщение fe120 »

Доброго всем времени суток.
Много гуглил много где находил подобные вопросы, но там топики заканчивались невыясненными.

И так суть дела:
Есть makefile со следующим содержанием:

Код: Выделить всё

CC = gcc
INCLUDES = -I/usr/include/mysql/
LIBS = -L/usr/lib64/mysql/
all: kursach.o
    $(CC) -o kursach kursach.o $(LIBS)
kursach.o:kursach.c
    $(CC) -c $(INCLUDES) kursach.c
.PHONY: clean
clean:
    rm -f kursach kursach.o

и собственно код самой программы:

Код: Выделить всё

#include <mysql.h>
#include <stdio.h>

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

   char *server = "localhost";
   char *user = "root";
   char *password = "123321"; /* set me first */
   char *database = "mysql";

   conn = mysql_init(NULL);

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

   /* send SQL query */
   if (mysql_query(conn, "show tables")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   res = mysql_use_result(conn);

   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);

   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);
}


при make all имеем следующее:

user@host

$~/codding/k$ make all gcc -o kursach kursach.o -L/usr/lib64/mysql/ kursach.o: In function `main': kursach.c:(.text+0x2f): undefined reference to `mysql_init' kursach.c:(.text+0x6c): undefined reference to `mysql_real_connect' kursach.c:(.text+0x7d): undefined reference to `mysql_error' kursach.c:(.text+0xb7): undefined reference to `mysql_query' kursach.c:(.text+0xc7): undefined reference to `mysql_error' kursach.c:(.text+0xfc): undefined reference to `mysql_use_result' kursach.c:(.text+0x134): undefined reference to `mysql_fetch_row' kursach.c:(.text+0x14b): undefined reference to `mysql_free_result' kursach.c:(.text+0x157): undefined reference to `mysql_close' collect2: ld returned 1 exit status make: *** [all] Ошибка 1


Если бы он говорил что не может найти mysql.h тогда понятны претензии компилятора...но ведь заголовочный файл находит...но как будто не находит этих функции, хотя они так есть...собственноручно проверил.

В чем загвозда??

при компиляции же чисто из консоли

user@host

$ lgcc -o kursach $(mysql_config --cflags) kursach.c $(mysql_config --libs)

все вполне компилируется и работает.

на 90% уверен проблема в моей невнимательности...
прошу ткнуть носов в ошибку.

заранее спасибо
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Решено: Си.makefile.mysql

Сообщение Portnov »

А -lmysql кто в ком.строку компиляции добавлять будет? ;)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
fe120
Сообщения: 16

Re: Решено: Си.makefile.mysql

Сообщение fe120 »

Код: Выделить всё

CC = gcc
INCLUDES = -I/usr/include/mysql  -DBIG_JOINS=1  -fno-strict-aliasing   -DUNIV_LINUX
LIBS = -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient

all: kursach.o
    $(CC) -o kursach kursach.o $(LIBS)

kursach.o:kursach.c
    $(CC) -c $(INCLUDES) -lmysqlclient kursach.c

.PHONY: clean

clean:
    rm -f kursach kursach.o


теперь выглядит вот так, и главное работает=))
Спасибо сказали: