【问题标题】:MySQL Connector C++ 64bit build from source in Visual Studio 2012MySQL 连接器 C++ 64 位从 Visual Studio 2012 中的源代码构建
【发布时间】:2013-11-29 08:33:49
【问题描述】:

我正在尝试在 Visual Studio 2012 中为 64 位 架构从源代码构建 mySQL 连接器 C++。 我知道这取决于一些 boost 头文件和 C 连接器。 运行 CMake 会生成一个项目文件,但该项目文件无法编译,因为一大堆非常令人困惑的错误可能与包含文件有关,而且还有更大的警告列表。官网帮助不大。

有人可以列出成功编译 C++ 连接器的所有步骤吗?

【问题讨论】:

    标签: c++ mysql visual-studio-2012 64-bit mysql-connector


    【解决方案1】:

    为了构建它,您需要具备以下条件:

    1. 您需要安装 MySQL 服务器或 MySQL C Connector
    2. 已安装Boost C++ libraries 或拥有它的源文件。请注意,不需要构建 boost,因为您只需要头文件。
    3. 已安装CMake。安装 CMake 时,它​​会询问您是否要将其包含在 PATH 变量中,您应该选择是,以便以后使用它更容易。

    当您拥有所有三个可用时,打开 VS2012 x64 本机工具命令提示符,然后从 MySQL C++ 连接器的源根目录发出以下命令:

    set MYSQL_DIR=c:\PROGRA~1\MySQL\MYSQLC~1.1
    cmake -G "Visual Studio 11 Win64" ^
          -DBOOST_ROOT:STRING=C:\Users\user\DOWNLO~1\BOOST_~1\BOOST_~1 ^
          -DMYSQL_LIB_DIR:STRING=c:\PROGRA~1\MySQL\MYSQLC~1.1\LIB
    devenv.com MySQLCPPCONN.sln /build Release
    

    第一个命令定义了MYSQL_DIR 变量,该变量指向 MySQL 服务器或 MySQL C 连接器的安装。 第二个命令调用 cmake 来准备一个 64 位的 VS 项目。 MYSQL_LIB_DIR 变量似乎有问题,它没有生成,所以我们需要手动定义它。 MYSQL_LIB_DIR 的值是 MYSQL_DIR,以 \LIB 结尾。 第三个命令是可选的,它会在不打开 VS 的情况下从命令提示符构建项目。

    建议您对变量使用 DOS 路径。 为此,导航到要转换为 DOS 路径的目录并调用 for %I in (.) do echo %~sI。它会给你转换后的路径。

    【讨论】:

    • 它确实有效!它为发布和调试编译。 216 警告仍然主要是说 xxx needs to have dll-interface 但库编译和喜欢很好! :)
    • 注意在dev.mysql.com/downloads/connector/cpp下载时需要在下拉列表中选择“源代码”。这可能看起来很愚蠢,但我错过了。
    • 我尝试使用-G="Visual Studio 14 2015",当我尝试构建解决方案时,我收到 141 个错误和 357 个警告。它让我发疯。
    【解决方案2】:

    这真的是一项艰巨的任务,我花了很多时间来解决这个问题。

    这里有两个问题:

    1. 他们提供的 C++ 连接器和 MySQL 库是用 Visual Studio 2010 生成的。因此我们不能像在 VS2012 下那样使用它们(它会出现版本不匹配错误)

    2. 他们也没有指定编译这些库的确切编译器选项。如果我们的编译器设置不同,我们最终会遇到很多(尤其是链接器相关的)错误。

    考虑到这些事实,唯一的办法就是自己构建这些库。构建 MySQL 很快,但构建连接器有点复杂。

    这是我要分享的步骤。就我而言,我想将这些库与我的项目静态链接,因此我相应地构建了这些库。您可能希望根据需要在必要时进行相关更改。

    在继续这些步骤之前,请在您的系统上下载并安装 CMake。

    搭建 MySQL 服务器的步骤:

    1. 下载 MySQL 源代码。提取它们。在命令提示符下进入提取的文件夹。

    2. 创建 BLD 文件夹

    3. 通过命令提示符进入 BLD 文件夹

    4. 运行

      cmake .. -G "Visual Studio 11 2012 Win64"
      

      它将创建 MySQL.sln

    5. 在 Visual Studio 中打开 MySQL.sln 并仅构建“mysqlclient”库(因为只有应用程序需要它)

    这将在我们在项目中链接的 mysql-5.6.24\BLD\libmysql\ 文件夹中构建库。

    构建 C++ 连接器的步骤:

    1. 下载 mysql-connector-c++ 源码。提取它。在命令提示符下进入提取的文件夹。

    2. 创建 BLD 文件夹

    3. 通过命令提示符进入 BLD 文件夹

    4. 运行这个命令(确保我们在此之前已经在发布和调试模式下构建了 MySQL 服务器。同时确保我们已经下载了 Boost 源)

      cmake .. -DMYSQL_INCLUDE_DIR="..\..\mysql-5.6.24\include" -DMYSQL_LIB_DIR:STRING="..\mysql-5.6.24\BLD\libmysql\Release" -DBOOST_ROOT:STRING="..\Boost\boost_1_54_0" -DMYSQL_CLIENT_STATIC_LINKING=1 -G "Visual Studio 11 2012 Win64" 
      

      它将创建 MYSQLCPPCONN.sln

    5. 在 Visual Studio 中打开 MYSQLCPPCONN.sln 并更改“mysqlcppconn-static”项目:

      A.在 C/C++ -> General -> Additional Include Directories 下放这个(适用于所有配置)

        nativeapi;..\;..\..\;..\cppconn;..\..\cppconn;..\..\..\mysql-5.6.24\include;..\..\..\mysql-5.6.24\BLD\include;..\..\..\Boost\boost_1_54_0
      

      B.在代码生成中,将运行时库更改为多线程(调试或非调试取决于配置)而不是 DLL

      C.在 Librarian -> All Options 下,将“Additional Options”和“Ignore specific Default Libraries”保留为空白(对于所有配置)

      D.在 Librarian -> General 下,将“Ignore Specific Default Libraries”保留为空白(对于所有配置)

    6. 仅构建 'mysqlcppconn-static' 库项目(因为只有应用程序需要它来连接 MySQL 服务器)

    这将在我们在项目中链接的 mysql-connector-c++-1.1.5\BLD\driver\ 文件夹中生成库。

    【讨论】:

    • 您有 Visual Studio 2013 的步骤和非静态连接器构建步骤吗?
    • 我从来没有尝试过,但是如果你分享了如果你对 VS2013 重复这些相同的步骤会遇到什么问题(使用 cmake 选项 -DMYSQL_CLIENT_STATIC_LINKING=0 进行非静态链接)?
    • 我能够使用 cmake 构建连接器 .. -DMYSQL_INCLUDE_DIR="D:\WEBSER~1\mysql\MYSQLS~1.6\include" -DMYSQL_LIB_DIR:STRING="D:\WEBSER~1 \mysql\MYSQLS~1.6\lib" -DBOOST_ROOT:STRING="D:\BOOST_~2" -DMYSQL_CLIENT_STATIC_LINKING=0 -G "Visual Studio 12 2013 Win64"
    • 您构建mysql服务器的步骤令人困惑。你只是做 cmake .. -G "Visual Studio 11 2012 Win64"?有没有链接?例如 -DMYSQL_CLIENT_STATIC_LINKING=0.....
    • 一旦它生成 MySQL.sln,我们就可以通过 Visual Studio 以我们想要的方式更改链接器/编译器配置。这同样适用于 MYSQLCPPCONN.sln。但是这里我们为 cmake 提供了额外的参数,以便我们在解决方案中获得头文件/库目录,之后我们不需要通过 Visual Studio 添加它们。但是我们仍然可以在之后将任何链接器/编译器配置更改为 .sln。 George Michael 的解决方案假定您已安装 MySQL,因此您无需构建 MySQL。但是,如果安装时附带的 MySQL lib 版本不同,您可能会收到链接器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2012-10-21
    相关资源
    最近更新 更多