На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> mysql C api при компиляции ошибка
    Привет всем!
    возник теперь вопрос как откомпилить приложения на Си с использование Апи МуСкула?

    ExpandedWrap disabled
      #include <stdio.h>
      #include <mysql.h>
       
      MYSQL *conn;    /* pointer to connection handler */
       
      int main ( int argc, char *argv[] )
      {
          conn = mysql_init ( NULL );
          mysql_real_connect (
                  conn,           /* pointer to connection handler */
                  "localhost",    /* host to connect to */
                  "user_name",    /* user name */
                  "password",     /* password */
                  "test",         /* database to use */
                  0,              /* port (default 3306) */
                  NULL,           /* socket or /var/lib/mysql.sock */
                  0 );            /* flags (none) */
       
          mysql_close ( conn );
          return 0;
      }


    gcc a.c -o a.exe -Lc:\mysql\bin\ -Ic:\mysql\include\

    И в итоги получаю такое сообщение

    In file included from include/mysql.h:72,
    from a.c:2:
    include/mysql_com.h:183: error: `SOCKET' does not name a type
    include/mysql_com.h:358: error: `SOCKET' was not declared in this scope
    include/mysql_com.h:358: error: expected primary-expression before "const"
    include/mysql_com.h:358: error: expected primary-expression before "unsigned"
    include/mysql_com.h:359: error: expected primary-expression before "unsigned"
    include/mysql_com.h:359: error: initializer expression list treated as compound expression


    Плз, почему возникает такая ошибка
      Странно, по указанным строкам в указанном файле нет вообще ни каких упоминаний про структуру SOCKET.
      А! В mysql.h нашлось. Ясно. Это так описали...
      Цитата
      Плз, почему возникает такая ошибка

      Не находит описания SOCKET. #include <winsock.h> в исходнике явно есть. Сталбыть, компиль не видит winsock.h...
      Кроме того, насколько я понимаю, это cygwin? Под вяндой лучше поставить себе "аналог" cygwin'а (в основе лежит mingw) -- Dev-C++. Из портов поставить библиотеки и исходники и забыть о всех проблемах.
        Немного подумав. Речь идёт вот об этом -> http://www.bloodshed.net/dev/devcpp.html

        Ктому же, хоть gcc.exe и в винде, он по идее, должен "понимать" где находится, но не худо было бы ему явно указать это.
        -DWIN32 -D_WINDOWS -no-cygwin (чтобы полученная программа не требовала бы окружения cygwin при её распространении).

        Хотя, если честно, то лучше прогуляться по ссылке выше, скачатьоттуда порядка 5 MB, потом налоить через менеджер пакетов обновления (mysql и postgres там есть) и забыть о проблемах.

        Добавлено
        Цитата
        -Lc:\mysql\bin\

        Кстати, а точно библиотека mysql лежит в c:\mysql\bin?
          Цитата Шадофф @
          Под вяндой лучше поставить себе "аналог" cygwin'а (в основе лежит mingw) -- Dev-C++


          т.е имели ввиду использовать mingw32-gcc!?

          mingw32-gcc aaa.c -o aaa.exe -Lc:\mysql\lib\opt\ -Ic:\mysql\include\ -DWIN32 -D_WINDOWS -no-cygwin

          результат тотже :(
          Сообщение отредактировано: itwork -
            Цитата
            т.е имели ввиду использовать mingw32-gcc!?

            Угу. Он в Dev-C++ (в среду) встроенный. Это не сильно важно. Важнее другое -- там все пути сразу подточены. В данном случае, по-моему, не находит заголовочный файл от win. Он вообще есть? Я имею ввиду winsock.h?
              c:\MinGW\include\
              да winsock.h есть
                понял!!! это дело в mysql.h!
                #ifdef __LCC__
                #include <winsock.h> /* For windows */
                #endif

                вот токо как правильно mysql.h отредактировать :blink:
                Сообщение отредактировано: itwork -
                  Цитата
                  понял!!!

                  Я то же. Блин, я тормоз. Понял это когда глянул свой проект примерно трёх-летней давности...
                  Цитата
                  это дело в mysql.h!

                  Отчасти да.

                  Короче, для решения всех проблем надо сделать следующее:
                  ExpandedWrap disabled
                    #include <my_global.h>
                    #include <mysql.h>

                  Вот именно в таком порядке эти два файла должны быть прописаны в исходнике. В my_global.h прописаны "конвертации" для платформы винды. И, на винде, оно так и должно быть прописано.
                  Дальше, включаем либы:
                  1 вариант (он немного лучше) -- привязываем к проекту libmysql.lib. По сути дела, это враппер для загрузки по требованию libmysql.dll во время исполнения.
                  2 вариант (он хорош для случая, когда программа должна загружаться вся целиком (без длл по возможности)) -- привязываем к проекту статическую либу mysqlclient.lib. В этом случае весь функционал библиотеки будет сразу включён в твой исполняемый файл.

                  Кроме того, в проекте должны быть привязаны либы -lm -lwsock32 -luser32 -lgcc.
                  Сообщение отредактировано: Шадофф -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,3565 ]   [ 15 queries used ]   [ Generated: 10.10.25, 04:05 GMT ]