c++ - Mysql connector/C++ for windows 2010 express 不编译

标签 c++ mysql mysql-connector

解决方案:我决定为遇到相同问题的人制定一个分步指南。我不知道这是否完全解决了所有问题,但它确实让您可以编译我将提供的代码片段。如果有任何错误,请发表评论,以便我可以修复它们。这是为了帮助那些因尝试失败而几乎放弃的人,坦率地说,应该记录整个过程。抱歉发了这么长的帖子: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 <stdlib.h>
#include <iostream>

/*
  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 <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

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 的错误。双击位于:c:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include\cppconn\config.h 的config.h。双击它来调出它。现在只需注释掉所有 typedef,那里应该只有 8 个。将 libmysql.dll(在 Connector/C 内)和 mysqlcppconn.dll(在 Connector/C++ 内)放在编译器将构建输出到的文件夹内。完成后保存并运行。

旧帖不要看

我已逐字执行此站点上的步骤:http://blog.ulf-wendel.de/?p=215 但是我仍然遇到编译错误。我对链接库或包含目录并不陌生,但我可以使用一个新的 super 英雄,他使用 mysql connector/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 <stdlib.h>
#include <iostream>
using namespace std;
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

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<<res->getInt("id")<<"  "<<res->getString("data")<<std::endl;
        delete res;
        delete pstmt;

        pstmt = con->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<<e.what();
    }

    int a;      // hang
    cin >> 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 <stdlib.h>
#include <iostream>

/*
  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 <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

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<char>,
    1>              _Ax=std::allocator<char>
    1>          ]
    1>c:\mysql c++ 64\include\mysql_connection.h(156): warning C4251: 'sql::mysql::MySQL_Connection::proxy' : class 'boost::shared_ptr<T>' 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<char>,
    1>              _Ax=std::allocator<char>
    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-question-regarding-connecting-to-mysql-50-using-visual- studio-2010/page_view_findpost_p_1474626 这哥们好像觉得是因为config.h和stdint.h在compile时冲突,因为config.h里面有个# int8_t 的 typedef。必须有一个解决方案。我什至会使用任何其他可以连接到本地 MySQL 数据库的库(免费),但我真的很想弄清楚这个问题以帮助大家。

最佳答案

因为有很多关于 C++ 和 MySQL 连接器的问题,而且很难让它工作,所以我会回答这个问题,即使这个问题是在 1 年前提出的。

解决方案很简单,您唯一需要做的就是在 cppcon/config.h 文件中注释所有 typedef

关于c++ - Mysql connector/C++ for windows 2010 express 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241465/

相关文章:

php - Sql 查询获取两个条件的匹配行

c++ - lambda 作为实例函数指针

c++ - 在 Linux 上为 Windows 开发人员调试

c++ - 在任何头文件中只定义一个类而不包括包含此类的整个头文件的目的是什么?

java - 准备好bean通过jdbc连接MySQL了吗?

mysql - 在 VS2019 中连接 Entity Framework 和 MYSQL

java - 针对 X DevAPI 禁用 MySQL Connector/J SSL

c++ - 访问 map 中的两个 vector 是不可能的吗?

php - 只打印第一轮 div 的循环 php

mysql - 如何在嵌套子查询中引用主查询的表?