Коннектор Mysql/C++ для Windows 2010 Express не компилируется

РЕШЕНИЕ: Я решил сделать пошаговое руководство для людей, имеющих такие же проблемы. Я не знаю, все ли это полностью исправляет, но позволяет скомпилировать фрагмент кода, который я предоставлю. Если есть какие-либо ошибки, пожалуйста, напишите, чтобы я мог их исправить. Это сделано для того, чтобы помочь тем, кто в основном отказался от неудачных попыток, и, честно говоря, весь процесс должен был быть задокументирован. Извините за длинный пост: P

STEP BY STEP FOR SETTING UP MYSQL CONNECTOR/C++ FOR 2010 MICROSOFT VISUAL C++ EXPRESS:
FILES NEEDED:
Windows x86 32 Bit ZIP: Connector/C++ -> http://dev.mysql.com/downloads/connector/cpp/
Windows X86 32 Bit ZIP: Connector/C -> http://dev.mysql.com/downloads/connector/c/
BOOST -> http://www.boost.org/users/download/

The reason why 62bit doesn't work is because you are using the express edition.  After you have downloaded all those files, extract them.  I keep mine in C (for ease of access).  Now open up MVC++ 2010 EXPRESS.
File -> New -> Project
Win32 Console Application
Next
Check Empty project
Finish
Create your first .cpp.  I call mine main.cpp
Project -> Properties
C/C++ -> General -> Additional Include Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include
C/C++ -> General -> Additional Include Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include\cppconn
C/C++ -> General -> Additional Include Directories -> C:\boost_1_49_0
Linker -> General -> Additional Library Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\lib
Linker -> General -> Additional Library Directories -> C:\mysql-connector-c-noinstall-6.0.2-win32\mysql-connector-c-noinstall-6.0.2-win32\lib
The reason why we downloaded the Connector/C is because it has two files we need: libmysql.lib and libmysql.dll
Linker -> Input -> Additional Dependencies -> mysqlcppconn.lib
Linker -> Input -> Additional Dependencies -> libmysql.lib

If you change to Release, youll have to enter in the information again.
In your main.cpp place the following code and build it:

=

/* Copyright 2008, 2010, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

There are special exceptions to the terms and conditions of the GPL
as it is applied to this software. View the full text of the
exception in file EXCEPTIONS-CONNECTOR-C++ in the directory of this
software distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

/* Standard C++ includes */
#include 
#include 

/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

#include 
#include 
#include 
#include 

using namespace std;



int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' » AS _message'..." << endl;

try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "YOUR USERNAME", "YOUR PASSWORD");
  /* Connect to the MySQL test database */
  con->setSchema("YOUR DATABASE");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
  while (res->next()) {
    cout << "\t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "\t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line »" << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

int a;      // hangs
cin >> a;

return EXIT_SUCCESS;
}

Вы должны получить ошибки для int8_t. Дважды щелкните файл config.h, расположенный по адресу: c:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include\cppconn\config.h.Дважды щелкните по нему, чтобы открыть его. Теперь просто закомментируйте все определения типов, их должно быть только 8. Поместите libmysql.dll(внутри Connector/C) и mysqlcppconn.dll(внутри Connector/C++) в папку, в которую компилятор выводит вашу сборку. Когда закончите, сохраните и запустите.

СТАРЫЕ ПОСТЫ НЕ СМОТРЮ

Я дословно следовал инструкциям на этом сайте: http://blog.ulf-wendel.de/?p=215 Но я все еще получаю ошибку компиляции. Я не новичок в связывании библиотек или включении каталогов, но я мог бы использовать нового супергероя, который создал приложения с коннектором mysql/c++ с 2010 Express..., чтобы сделать простой пример KISS. Целый день скриплю зубами. Источник примера: http://www.tidytutorials.com/2009/07/mysql-connector-c-example-windows-clexe.html(с измененной базой данных)

1>main.obj : error LNK2019: unresolved external symbol __imp__get_driver_instance referenced in function _main

#include 
#include 
using namespace std;
#include 
#include 
#include 
#include 
#include 

int main(){

    sql::Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;
    sql::ResultSet *res;
    sql::PreparedStatement *pstmt;

    try{
        driver = get_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
        con->setSchema("foxlogin");

        stmt = con->createStatement();
        stmt->execute("insert into example values(4,'four'),(5, 'five')");
        delete stmt;

        pstmt = con->prepareStatement("select * from example");
        res = pstmt->executeQuery();
        while (res->next())
            std::cout<getInt("id")<<"  "<getString("data")<prepareStatement("delete from example where id=?");
        pstmt->setInt(1,4);
        pstmt->executeUpdate();
        pstmt->setInt(1,5);
        pstmt->executeUpdate();

        delete pstmt;

        delete con;    
    }catch(sql::SQLException &e){
        std::cout<> a;

    return 0;
}

ОБНОВЛЕНИЕ: я следовал этому также: http://forums.mysql.com/read.php?167,492097,492097#msg-492097Я даже использовал коннекторы C++ и C (отдельные сборки) вместе с ОБА тестами с каждым 64- и 32-битные версии (всего 4 теста). Я скачал boost и связал его. Новый код, который я использую, я опубликую ниже, он взят с официального сайта mysql. Обе сборки выдают ОДИНАКОВЫЕ ошибки.

/* Copyright 2008, 2010, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

There are special exceptions to the terms and conditions of the GPL
as it is applied to this software. View the full text of the
exception in file EXCEPTIONS-CONNECTOR-C++ in the directory of this
software distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

/* Standard C++ includes */
#include 
#include 

/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

#include 
#include 
#include 
#include 

using namespace std;

int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' » AS _message'..." << endl;

try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
  /* Connect to the MySQL test database */
  con->setSchema("test");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
  while (res->next()) {
    cout << "\t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "\t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " »
     << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}

ОШИБКИ СБОРКИ ДЛЯ ТЕСТА 64: (я не включаю тест на ошибки 32-битной сборки, если вам нужно, я предоставлю)

   1>------ Build started: Project: erthwrthj, Configuration: Debug Win32 ------
    1>  main.cpp
    1>c:\mysql c++ 64\include\cppconn\sqlstring.h(36): warning C4251: 'sql::SQLString::realStr' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'sql::SQLString'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits,
    1>              _Ax=std::allocator
    1>          ]
    1>c:\mysql c++ 64\include\mysql_connection.h(156): warning C4251: 'sql::mysql::MySQL_Connection::proxy' : class 'boost::shared_ptr' needs to have dll-interface to be used by clients of class 'sql::mysql::MySQL_Connection'
    1>          with
    1>          [
    1>              T=sql::mysql::NativeAPI::NativeConnectionWrapper
    1>          ]
    1>c:\mysql c++ 64\include\cppconn\exception.h(59): warning C4251: 'sql::SQLException::sql_state' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'sql::SQLException'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits,
    1>              _Ax=std::allocator
    1>          ]
    1>c:\mysql c++ 64\include\cppconn\config.h(60): error C2371: 'int8_t' : redefinition; different basic types
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdint.h(17) : see declaration of 'int8_t'
    1>c:\mysql c++ 64\include\cppconn\config.h(60): error C2371: 'int8_t' : redefinition; different basic types
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdint.h(17) : see declaration of 'int8_t'
    1>c:\users\null\documents\visual studio 2010\projects\erthwrthj\erthwrthj\main.cpp(74): error C2146: syntax error : missing ';' before identifier '»'
    1>c:\users\null\documents\visual studio 2010\projects\erthwrthj\erthwrthj\main.cpp(74): error C2065: '»' : undeclared identifier
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Будем признательны за помощь!

ОБНОВЛЕНИЕ 2: view_findpost_ p_1474626">http://www.dreamincode.net/forums/topic/253647-вопрос-относительно-подключения-к-mysql-50-использованию-visual-studio-2010/page_ view_findpost_ p_1474626 Кажется, этот парень думает это потому, что config.h конфликтует с stdint.h при компиляции, потому что в config.h есть #typedef для int8_t. Должно быть решение для этого. Я даже возьму любые другие библиотеки (бесплатные), которые могут подключаться к локальной базе данных MySQL, но я очень хочу разобраться с этим, чтобы помочь всем.

7
задан user1328762 20 April 2012 в 09:54
поделиться