5.2.1 视窗注意事项

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

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

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

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

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

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

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

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

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

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

以下部分提供了有关构建连接器/C++ 应用程序的几个方面的更多详细信息:

应用程序构建配置必须匹配连接器/C++

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

下表显示了适用于构建模式和运行时库的每种组合的链接器选项。它还会针对每个组合显示 Oracle 是否提供连接器/C++ 二进制包。(如果没有,您必须自己从源代码构建连接器/C++。)

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

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

Oracle 提供的标准连接器/C++ 二进制包以发布模式构建。如果您安装这样的包,请在发布模式下构建应用程序以匹配。在调试模式下构建的 Oracle 包也可用。要在调试模式下构建应用程序,您必须安装在调试模式下构建的 Oracle 构建的连接器/C++ 包,或者使用调试模式从源代码中自行构建连接器/C++。

Oracle 提供的连接器/C++ 二进制包,无论是在发布模式还是调试模式下构建,都旨在与 C++ 运行时库的动态版本一起使用。要使用静态运行时库构建应用程序,您必须使用适用于预期构建模式的适当链接器选项从源代码中自行构建 Connector/C++。

将连接器/C++ 链接到应用程序

连接器/C++ 二进制分发版可作为 64 位或 32 位包使用,它们分别将库存储在名为 lib64或的目录下lib。包名称和某些库文件和目录名称还包括 . 这些名称中的 值取决于用于构建库的 MSVC 工具链版本。此约定允许在同一系统上使用使用不同版本的 MSVC 构建的库。 vsNNvsNN

笔记

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

/MD连接器/C++ 二进制包包括在发布模式 ( ) 或调试模式 ( ) 下使用动态运行时库构建的库/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++ 可作为动态或静态库与您的应用程序一起使用。您选择的库决定了所需的库文件,而这些文件在连接器/C++ 包中的位置取决于包是在发布模式还是调试模式下构建的。库文件位于库目录下,如前所述,库目录 lib64用于 64 位包或 lib32 位包。将此目录表示为LIB. 下表显示了每种类型的库(包括导入库,与动态库结合使用)的库文件所在的目录。

表 5.2 连接器/C++ 库文件目录

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

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

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

连接器 动态库文件 导入库文件
X DevAPI,用于 C 的 X DevAPI 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 每个连接器的连接器/C++ 静态库文件

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

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

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

构建使用连接器/C++ 库的代码时,请使用以下指南在项目配置中设置构建选项:

  • 作为附加包含目录,指定 $MYSQL_CPPCONN_DIR/include.

  • 作为附加库目录,指定包含应用程序必须链接到的库的目录,如 表 5.2“连接器/C++ 库文件目录”中所示。例如,要指定在发布模式下构建的导入或静态库目录,请使用 $MYSQL_CONCPP_DIR/lib64/vs14(对于 64 位库)或 $MYSQL_CONCPP_DIR/lib/vs14(对于 32 位库)。要在调试模式下构建,请更改 vs14vs14/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 构建连接器/C++ 应用程序

要使用 Microsoft Visual Studio 构建连接器/C++ 应用程序,请遵循以下过程:

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

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

    从主菜单中,选择项目属性。这也可以使用热键ALT + F7访问。在Configuration Properties下,打开树视图。在树视图中 选择 C/C++General 。

    附加包含目录 文本字段中:

  3. 设置库位置。

    在树视图中,打开LinkerGeneralAdditional Library Directories

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

    笔记

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

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

    打开Linker, 在Property Pages对话框 中输入。

    对于使用 Connector/C++ 动态库构建,输入导入库名称: mysqlcppconn8.lib,或者 mysqlcppconn.lib对于遗留应用程序。

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

  5. 为静态链接定义宏。

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

    ProjectProperties树视图中,在 C++下的 Preprocessor下,将适当的宏输入到Preprocessor Definitions 文本字段中:

    • 对于使用 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++ 动态库,则它必须存在于运行应用程序的目标主机上。将适当的连接器/C++ 动态库复制到与应用程序可执行文件相同的目录(请参阅 将连接器/C++ 链接到应用程序)。或者,使用扩展PATH 环境变量,或将动态库复制到 Windows 安装目录,通常是. SET PATH=%PATH%;C:\path\to\cppC:\windows

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