本节介绍构建 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++ 相同的构建配置。也就是说,应用程序应使用相同的构建模式和链接器选项,以确保连接器和应用程序使用相同的运行时库。
下表显示了每种构建模式和运行时库组合的相应链接器选项。它还显示了每种组合是否存在 Oracle 提供的 Connector/C++ 二进制包。(如果没有,则必须自己从源代码构建 Connector/C++。)
表 5.1 每种构建模式和运行时库的 Connector/C++ 链接器选项
构建模式 | 运行时库 | 链接器选项 | 二进制包可用 |
---|---|---|---|
发布 | 动态 | /MD |
是 |
调试 | 动态 | /MDd |
是 |
发布 | 静态 | /MT |
否(从源代码构建) |
调试 | 静态 | /MTd |
否(从源代码构建) |
Oracle 提供的标准 Connector/C++ 二进制包在发布模式下构建。如果您安装了此类包,请在发布模式下构建应用程序以匹配。Oracle 也提供在调试模式下构建的包。要在调试模式下构建应用程序,您必须安装在调试模式下构建的 Oracle 构建的 Connector/C++ 包,或者使用调试模式从源代码自己构建 Connector/C++。
Connector/C++ 二进制发行版提供为 64 位或 32 位包,它们将库存储在名为 lib64
或 lib
的目录下。包名和某些库文件和目录名也包含 vs
。这些名称中的 NN
vs
值取决于用于构建库的 MSVC 工具链版本。此约定允许在同一系统上使用使用不同 MSVC 版本构建的库。NN
值 vs
表示用于构建库的 MSVC 工具链的主要版本。目前是 NN
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++ 库文件目录
库类型 | 库文件目录(发布构建) | 库文件目录(调试构建) |
---|---|---|
动态库 |
|
|
导入库 |
|
|
静态库 |
|
|
对于动态链接,下表指示要使用哪些动态和导入库文件。
表 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++ 应用程序,请遵循以下步骤
在 Visual Studio 中启动一个新的 Visual C++ 项目。
-
设置所需的包含路径。
从主菜单中选择 配置属性 下,打开树形视图。在树形视图中选择 ,常规。
, 。也可以使用热键 + 访问。在在 附加包含目录 文本字段中
添加 Connector/C++ 的
include/
目录。该目录应该位于 Connector/C++ 的安装目录中。如果构建应用程序需要 Boost,请添加 Boost 库的根目录。(请参见 第 5.1 节,“构建 Connector/C++ 应用程序:一般注意事项”。)
-
设置库位置。
在树形视图中打开 链接器,常规,附加库目录。
在 附加库目录 文本字段中,添加 Connector/C++ 的导入库或静态库目录,如 表 5.2,“Connector/C++ 库文件目录” 所示。为发布和调试构建设置适当的路径。
注意在调试模式下构建时,必须安装 Connector/C++ 调试包。
-
设置要使用的连接器库。
在 属性页 对话框中打开 链接器,输入。
对于使用 Connector/C++ 动态库进行构建,请输入导入库名称:
mysqlcppconn8.lib
,或对于旧版应用程序,请输入mysqlcppconn.lib
。对于使用 Connector/C++ 静态库进行构建,请输入静态库名称:
mysqlcppconn8-static.lib
,或对于旧版应用程序,请输入mysqlcppconn-static.lib
。注意通用 Linux 包不包含 Connector/C++ 静态库。
-
为静态链接定义宏。
要编译与连接器库静态链接的代码,必须定义一个宏,该宏会调整头文件中的 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
中列出的某个目录中。