Форум программистов, компьютерный форум CyberForum.ru

Ошибка lnk2019 при подключении к MySQL - C++

Войти
Регистрация
Восстановить пароль
 
YaMolekula
14 / 14 / 2
Регистрация: 03.02.2010
Сообщений: 142
27.10.2011, 10:52     Ошибка lnk2019 при подключении к MySQL #1
Доброго Времени Суток! В общем, я нашел здесь небольшой туториал по взаимодействию с MySQL и попытался запустить следующий код, кинув предварительно все lib и заголовочные файлы в стандартные директории:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
 
#define __LCC__ // Объявляем директиву без которой программа не может работать. Можно конечно поключить windows.h, но это будет не красиво
 
#pragma comment(lib, "libmysql.lib") // подключаем библиотеку
#pragma comment(lib,"mysqlclient.lib ")
#include <mysql.h> // Заголовочный файл с описание функций
#include <stdio.h>
#include <conio.h>
 
void mysql(const char query[])
{
    MYSQL mysql; // Дескриптор соединения
    MYSQL_ROW row; // Массив полей текущей строки
    MYSQL_RES *res; // Дескриптор результирующей таблицы
    MYSQL_FIELD *field;
 
    char host[] = "localhost"; // хост
    char user[] = "admin"; // пользователь
    char passwd[] = "admin"; // пароль
    char db[] = "library"; // название базы данных
    int port = 0; //  порт. Если порт у сервера MySQL не по умолчанию (3306), то нужно указывать конкретный номер порта
 
    mysql_init(&mysql);  // Инициализация
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0); // соединение
 
    if (mysql_query(&mysql, query) > 0) // запорс. Если ошибок нет, то продолжаем работу
        {
            
            // Если была ошибка, ...
            printf("%s", mysql_error(&mysql));  // ... вывдем ее
            return; // и завершим работу
        } 
 
    res = mysql_store_result(&mysql); // Берем результат,
    int num_fields = mysql_num_fields(res); // количество полей
    int num_rows = mysql_num_rows(res); // и количество строк.
 
    for (int i = 0; i < num_fields; i++) // Выводим названия полей
    {
      field = mysql_fetch_field_direct(res, i); // Получение названия текущего поля
      printf("| %s |", field->name);
    }
 
    printf("\n");
    
    for (int i = 0; i < num_rows; i++) // Вывод таблицы
    {
      row = mysql_fetch_row(res); // получаем строку
 
      for (int l = 0; l < num_fields; l++)
        printf("| %s |", row[l]); // Выводим поля
        
      printf("\n");
    }
    
    printf("Count records = %d", num_rows); // Вывод информации о количестве записей
    mysql_free_result(res); // Очищаем результаты
    mysql_close(&mysql); // Закрываем соединение
}
 
int main()
{
  mysql("SELECT * FROM t_mid_author"); // Запрос
  getch(); // Ожидаем нажатие клавиши
  return 0;
}
1>------ Построение начато: проект: tutoMySQL, Конфигурация: Debug Win32 ------
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_close@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_free_result@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_fetch_row@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_fetch_field_direct@8 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_num_rows@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_num_fields@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_store_result@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_error@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_query@8 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_real_connect@32 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_init@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>C:\CPPWORK\DBWork\tutoMySQL\Debug \tutoMySQL.exe : fatal error LNK1120: 11 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Что можно сделать в случае такой ошибки, что бы устранить её?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 10:52     Ошибка lnk2019 при подключении к MySQL
Посмотрите здесь:

Ошибка LNK2019 при линковке Visual C++
Ошибка LNK2019 при сборке проекта. C++
Ошибка LNK2019 при линковке - как это решать систематически? C++
C++ Ошибка при компиляции error LNK2019
Visual C++ Ошибка линковки LNK2019 при линковке (линкер не видит функцию в либе)
Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ C++
Ошибка при компиляции LNK2019 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
27.10.2011, 13:31     Ошибка lnk2019 при подключении к MySQL #2
это -
Цитата Сообщение от YaMolekula Посмотреть сообщение
#include <mysql.h> // Заголовочный файл с описание функций
замени на это -
C
1
2
3
extern "C" {
#include <mysql.h> // Заголовочный файл с описание функций
}
Добавлено через 1 минуту
Цитата Сообщение от YaMolekula Посмотреть сообщение
#pragma comment(lib,"mysqlclient.lib ")
и здесь, помоему, должна быть libmysqlclient.lib
YaMolekula
14 / 14 / 2
Регистрация: 03.02.2010
Сообщений: 142
27.10.2011, 22:28  [ТС]     Ошибка lnk2019 при подключении к MySQL #3
Цитата Сообщение от niXman Посмотреть сообщение
это -

замени на это -
C
1
2
3
extern "C" {
#include <mysql.h> // Заголовочный файл с описание функций
}
Добавлено через 1 минуту

и здесь, помоему, должна быть libmysqlclient.lib
К сожалению, после изменений всё-равно выдаются эти ошибки.
niXman
Эксперт C++
 Аватар для niXman
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
27.10.2011, 23:48     Ошибка lnk2019 при подключении к MySQL #4
ты все правильно изменил?
покажи как оно теперь выглядит?
YaMolekula
14 / 14 / 2
Регистрация: 03.02.2010
Сообщений: 142
28.10.2011, 22:52  [ТС]     Ошибка lnk2019 при подключении к MySQL #5
Код полчился такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
 
#define __LCC__ // Объявляем директиву без которой программа не может работать. Можно конечно поключить windows.h, но это будет не красиво
#pragma comment(lib, "libmysql.lib") // подключаем библиотеку
#pragma comment(lib,"mysqlclient.lib ")
extern "C" {
  #include <mysql.h> // Заголовочный файл с описанием функций
}
#include <stdio.h>
#include <conio.h>
 
void mysql(const char query[])
{
    MYSQL mysql; // Дескриптор соединения
    MYSQL_ROW row; // Массив полей текущей строки
    MYSQL_RES *res; // Дескриптор результирующей таблицы
    MYSQL_FIELD *field;
 
    char host[] = "localhost"; // хост
    char user[] = "admin"; // пользователь
    char passwd[] = "admin"; // пароль
    char db[] = "library"; // название базы данных
    int port = 0; //  порт. Если порт у сервера MySQL не по умолчанию (3306), то нужно указывать конкретный номер порта
 
    mysql_init(&mysql);  // Инициализация
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0); // соединение
 
    if (mysql_query(&mysql, query) > 0) // запорс. Если ошибок нет, то продолжаем работу
        {
            
            // Если была ошибка, ...
            printf("%s", mysql_error(&mysql));  // ... вывдем ее
            return; // и завершим работу
        } 
 
    res = mysql_store_result(&mysql); // Берем результат,
    int num_fields = mysql_num_fields(res); // количество полей
    int num_rows = mysql_num_rows(res); // и количество строк.
 
    for (int i = 0; i < num_fields; i++) // Выводим названия полей
    {
      field = mysql_fetch_field_direct(res, i); // Получение названия текущего поля
      printf("| %s |", field->name);
    }
 
    printf("\n");
    
    for (int i = 0; i < num_rows; i++) // Вывод таблицы
    {
      row = mysql_fetch_row(res); // получаем строку
 
      for (int l = 0; l < num_fields; l++)
        printf("| %s |", row[l]); // Выводим поля
        
      printf("\n");
    }
    
    printf("Count records = %d", num_rows); // Вывод информации о количестве записей
    mysql_free_result(res); // Очищаем результаты
    mysql_close(&mysql); // Закрываем соединение
}
 
int main()
{
  mysql("SELECT * FROM t_mid_author"); // Запрос
  getch(); // Ожидаем нажатие клавиши
  return 0;
}
Ошибки возникают примерно такие же:
1>------ Построение начато: проект: tutoMySQL, Конфигурация: Debug Win32 ------
1> tutoMySQL.cpp
1>c:\cppwork\dbwork\tutomysql\tutomysql\tutomysql.cpp(44): warning C4244: инициализация: преобразование "my_ulonglong" в "int", возможна потеря данных
1>c:\cppwork\dbwork\tutomysql\tutomysql\tutomysql.cpp(72): warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\conio.h(128): см. объявление "getch"
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_close@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_free_result@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_fetch_row@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_fetch_field_direct@8 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_num_rows@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_num_fields@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_store_result@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_error@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_query@8 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_real_connect@32 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>tutoMySQL.obj : error LNK2019: ссылка на неразрешенный внешний символ _mysql_init@4 в функции "void __cdecl mysql(char const * const)" (?mysql@@YAXQBD@Z)
1>C:\CPPWORK\DBWork\tutoMySQL\Debug\tutoMySQL.exe : fatal error LNK1120: 11 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Если поставить libmysqlclient.lib, то пишет:
1>LINK : fatal error LNK1104: не удается открыть файл "libmysqlclient.lib "

Может это связано с тем, что я использовал Express-версию?
niXman
Эксперт C++
 Аватар для niXman
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2011, 14:07     Ошибка lnk2019 при подключении к MySQL #6
libmysql.lib и libmysqlclient.lib откуда взяты и где лежат?
YaMolekula
14 / 14 / 2
Регистрация: 03.02.2010
Сообщений: 142
31.10.2011, 07:14  [ТС]     Ошибка lnk2019 при подключении к MySQL #7
Я их взял из "С:\Program Files\MySQL\MySQL Server 5.5\lib\" и скопировал в папку "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"
niXman
Эксперт C++
 Аватар для niXman
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.10.2011, 15:49     Ошибка lnk2019 при подключении к MySQL #8
Цитата Сообщение от YaMolekula Посмотреть сообщение
#pragma comment(lib,"mysqlclient.lib ")
тут должно быть libmysqlclient.lib.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 23:17     Ошибка lnk2019 при подключении к MySQL
Еще ссылки по теме:

C++ Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"
C++ Ошибка при работе со структурами: error LNK2019: ссылка на неразрешенный внешний символ _main
Ошибка LNK2019 При динамическом создании объекта C++
Ошибка при подключении MPI C++
C++ Builder Ошибка при подключении MySQL к C++ Builder 6

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YaMolekula
14 / 14 / 2
Регистрация: 03.02.2010
Сообщений: 142
01.11.2011, 23:17  [ТС]     Ошибка lnk2019 при подключении к MySQL #9
Я там нашёл только файл mysqlclient.lib, при изменении в коде на libmysqlclient.lib появляется ошибка:
LNK1104: не удается открыть файл "libmysqlclient.lib"
Yandex
Объявления
01.11.2011, 23:17     Ошибка lnk2019 при подключении к MySQL
Ответ Создать тему
Опции темы

Текущее время: 04:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru