5.2.1 Windows 说明

本节介绍构建 Connector/C++ 应用程序的特定于 Microsoft Windows 的方面。有关一般应用程序构建信息,请参见 第 5.1 节,“构建 Connector/C++ 应用程序:一般注意事项”.

在 Windows 上,应用程序可以在不同的构建配置中构建,这决定了最终可执行文件使用的 C++ 运行时库类型。

  • 应用程序可以在 32 位或 64 位模式下构建。

  • 应用程序可以在发布模式或调试模式下构建。

  • 您可以选择动态运行时库(/MD 链接器选项)或静态运行时库(/MT 链接器选项)。MSVC 编译器的不同版本也使用运行时库的不同版本。

要构建 Connector/C++ 应用程序,使用 Windows 的开发人员必须满足以下条件

  • 需要 Microsoft Visual Studio 的可接受版本。

  • 应用程序应使用与构建 Connector/C++ 相同的构建配置。构建配置包括构建模式(发布模式或调试模式)和链接器选项(例如,/MD/MDd)。

  • 运行客户端应用程序的目标主机必须安装可接受版本的 Visual C++ Redistributable for Visual Studio

有关 Visual Studio 和 VC++ Redistributable 的可接受版本的更多信息,请参见 平台支持和先决条件.

以下各节将详细介绍构建 Connector/C++ 应用程序的几个方面

应用程序构建配置必须与 Connector/C++ 相匹配

使用兼容的编译器版本构建应用程序和 Connector/C++ 非常重要。构建应用程序时,也必须使用与构建 Connector/C++ 相同的构建配置。也就是说,应用程序应使用相同的构建模式和链接器选项,以确保连接器和应用程序使用相同的运行时库。

下表显示了每种构建模式和运行时库组合的相应链接器选项。它还显示了每种组合是否存在 Oracle 提供的 Connector/C++ 二进制包。(如果没有,则必须自己从源代码构建 Connector/C++。)

表 5.1 每种构建模式和运行时库的 Connector/C++ 链接器选项

构建模式 运行时库 链接器选项 二进制包可用
发布 动态 /MD
调试 动态 /MDd
发布 静态 /MT 否(从源代码构建)
调试 静态 /MTd 否(从源代码构建)

Oracle 提供的标准 Connector/C++ 二进制包在发布模式下构建。如果您安装了此类包,请在发布模式下构建应用程序以匹配。Oracle 也提供在调试模式下构建的包。要在调试模式下构建应用程序,您必须安装在调试模式下构建的 Oracle 构建的 Connector/C++ 包,或者使用调试模式从源代码自己构建 Connector/C++。

将 Connector/C++ 链接到应用程序

Connector/C++ 二进制发行版提供为 64 位或 32 位包,它们将库存储在名为 lib64lib 的目录下。包名和某些库文件和目录名也包含 vsNN。这些名称中的 vsNN 值取决于用于构建库的 MSVC 工具链版本。此约定允许在同一系统上使用使用不同 MSVC 版本构建的库。

注意

vsNN 表示用于构建库的 MSVC 工具链的主要版本。目前是 vs14,这是 MSVC 2015 到 2019 使用的工具链。

Connector/C++ 二进制包包含使用发布模式(/MD)或调试模式(/MDd)中的动态运行时库构建的库。Connector/C++ 库与 MSVC 2019 和 2017 兼容,使用这些库的代码可以使用 MSVC 2019 或 2017 使用相应的链接器选项(即,发布模式为 /MD,调试模式为 /MDd)构建。要使用不同的链接器选项(/MT/MTd)构建代码,首先使用该选项从源代码构建 Connector/C++(参见 第 4.3 节,“从源代码安装 Connector/C++”),然后使用相同的选项构建应用程序。

注意

编译器版本兼容性方面的一个例外是,要构建使用静态 JDBC 遗留连接器的应用程序,需要 MSVC 2019;2017 不起作用。

Connector/C++ 可作为动态库或静态库,供您的应用程序使用。您选择哪种库决定了所需的库文件,而这些文件在 Connector/C++ 包中的位置取决于该包是在发布模式还是调试模式下构建的。库文件位于库目录下,如前所述,对于 64 位包,该目录为 lib64,对于 32 位包,该目录为 lib。将此目录表示为 LIB。下表显示了每个库类型(包括与动态库一起使用的导入库)的库文件所在的目录。

表 5.2 Connector/C++ 库文件目录

库类型 库文件目录(发布构建) 库文件目录(调试构建)
动态库 LIB LIB/debug
导入库 LIB/vs14 LIB/vs14/debug
静态库 LIB/vs14 LIB/vs14/debug

对于动态链接,下表指示要使用哪些动态和导入库文件。

表 5.3 每个连接器的 Connector/C++ 动态和导入库文件

连接器 动态库文件 导入库文件
X DevAPI,X DevAPI for C mysqlcppconn8-2-vs14.dll mysqlcppconn8.lib
JDBC mysqlcppconn-7-vs14.dll mysqlcppconn.lib

对于 X DevAPI 或 X DevAPI for C 连接器,请使用名为 mysqlcppconn8-2-vs14.dll 的动态库文件,以及来自导入库目录的名为 mysqlcppconn8.lib 的导入库文件。动态库名称中的 2 是主要 ABI 版本号。(这有助于在使用具有旧 ABI 的兼容库与具有不同 ABI 的新库时。)系统上安装的库可能在文件名中具有不同的 ABI 版本。

对于遗留 JDBC 连接器,请使用名为 mysqlcppconn-7-vs14.dll 的动态库文件,以及来自导入库目录的名为 mysqlcppconn.lib 的导入库文件。

对于静态链接,下表指示要使用哪个静态库文件。

表 5.4 每个连接器的 Connector/C++ 静态库文件

连接器 静态库文件
X DevAPI,X DevAPI for C mysqlcppconn8-static.lib
JDBC mysqlcppconn-static.lib

对于 X DevAPI 或 X DevAPI for C 连接器,请使用来自静态库目录的名为 mysqlcppconn8-static.lib 的静态库文件。

对于遗留 JDBC 连接器,请使用来自静态库目录的名为 mysqlcppconn-static.lib 的静态库文件。

在构建使用 Connector/C++ 库的代码时,请使用以下准则设置项目配置中的构建选项

  • 作为额外的包含目录,请指定 $MYSQL_CPPCONN_DIR/include

  • 作为额外的库目录,请指定包含应用程序必须链接到的库的目录,如 表 5.2,“Connector/C++ 库文件目录” 所示。例如,要指定导入或静态库目录以在发布模式下构建,请使用 $MYSQL_CONCPP_DIR/lib64/vs14(对于 64 位库)或 $MYSQL_CONCPP_DIR/lib/vs14(对于 32 位库)。对于在调试模式下构建,请将 vs14 更改为 vs14/debug

  • 要使用动态库文件(.dll 扩展名),请将您的应用程序与 .lib 导入库链接:mysqlcppconn8.lib 到链接器选项,或 mysqlcppconn.lib 用于遗留代码。

  • 要使用静态库文件(.lib 扩展名),请将您的应用程序与库链接:mysqlcppconn8-static.lib,或 mysqlcppconn-static.lib 用于遗留代码。

对于静态链接,应用程序还必须与所需 OpenSSL 库的导入库链接。如果连接器是从 Oracle 提供的二进制包安装的,这些库位于主库目录下的 vs14 子目录中($MYSQL_CONCPP_DIR/lib64$MYSQL_CONCPP_DIR/lib),相应的 OpenSSL .dll 库位于主库目录中。

注意

使用连接器动态库的 Windows 应用程序必须能够在运行时找到它及其依赖项(如 OpenSSL)。这通常的做法是将所有必需的 DLL 复制到与应用程序可执行文件相同的目录。

使用 Microsoft Visual Studio 构建 Connector/C++ 应用程序

要使用 Microsoft Visual Studio 构建 Connector/C++ 应用程序,请遵循以下步骤

  1. 在 Visual Studio 中启动一个新的 Visual C++ 项目。

  2. 设置所需的包含路径。

    从主菜单中选择 项目属性。也可以使用热键 ALT + F7 访问。在 配置属性 下,打开树形视图。在树形视图中选择 C/C++常规

    附加包含目录 文本字段中

  3. 设置库位置。

    在树形视图中打开 链接器常规附加库目录

    附加库目录 文本字段中,添加 Connector/C++ 的导入库或静态库目录,如 表 5.2,“Connector/C++ 库文件目录” 所示。为发布和调试构建设置适当的路径。

    注意

    在调试模式下构建时,必须安装 Connector/C++ 调试包。

  4. 设置要使用的连接器库。

    属性页 对话框中打开 链接器输入

    对于使用 Connector/C++ 动态库进行构建,请输入导入库名称:mysqlcppconn8.lib,或对于旧版应用程序,请输入 mysqlcppconn.lib

    对于使用 Connector/C++ 静态库进行构建,请输入静态库名称:mysqlcppconn8-static.lib,或对于旧版应用程序,请输入 mysqlcppconn-static.lib

    注意

    通用 Linux 包不包含 Connector/C++ 静态库。

  5. 为静态链接定义宏。

    要编译与连接器库静态链接的代码,必须定义一个宏,该宏会调整头文件中的 API 声明以用于静态库。默认情况下,该宏未定义,以声明函数与调用 DLL 的应用程序兼容。

    项目属性 树形视图中,在 C++预处理器 下,将适当的宏输入到 预处理器定义 文本字段中

    • 对于使用 X DevAPI、X DevAPI for C 或(从 Connector/C++ 8.0.16 开始)旧版 JDBC API 的应用程序,请定义 STATIC_CONCPP 宏。重要的是定义它,值并不重要。例如:-DSTATIC_CONCPP

    • 在 Connector/C++ 8.0.16 之前,对于使用旧版 JDBC API 的应用程序,请将 CPPCONN_PUBLIC_FUNC 宏定义为空字符串。为了确保这一点,请将该宏定义为 CPPCONN_PUBLIC_FUNC=,而不是 CPPCONN_PUBLIC_FUNC

注释
  • 运行客户端应用程序的目标主机必须安装 Visual C++ Redistributable for Visual Studio。有关哪些 VC++ Redistributable 版本可接受的信息,请参见 平台支持和先决条件

  • 如果您的代码使用 Connector/C++ 动态库,则该库必须存在于运行应用程序的目标主机上。将适当的 Connector/C++ 动态库复制到与应用程序可执行文件相同的目录中(请参见 将 Connector/C++ 链接到应用程序)。或者,使用 SET PATH=%PATH%;C:\path\to\cpp 扩展 PATH 环境变量,或者将动态库复制到 Windows 安装目录,通常是 C:\windows

  • 如果您的代码使用 Connector/C++ 静态库,则必须在运行应用程序的目标主机上找到所需的 OpenSSL 库。对于 Connector/C++ 二进制发行版,OpenSSL .dll 库存在于主库目录中 ($MYSQL_CONCPP_DIR/lib64$MYSQL_CONCPP_DIR/lib)。将它们复制到与应用程序可执行文件相同的目录中,或者复制到系统 PATH 中列出的某个目录中。