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++ 程式庫的程式碼時,請使用以下指南在專案配置中設定建置選項

  • 作為額外的 include 目錄,請指定 $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 提供的二進位套件安裝,這些程式庫會位於主程式庫目錄($MYSQL_CONCPP_DIR/lib64$MYSQL_CONCPP_DIR/lib)下的 vs14 子目錄中,而對應的 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. 設定程式庫位置。

    在樹狀檢視中,開啟連結器一般其他程式庫目錄

    其他程式庫目錄文字欄位中,新增 表 5.2,「Connector/C++ 程式庫檔案目錄」 中指定的 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、C 語言的 X DevAPI 或(從 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 Studio 的 Visual C++ 可轉散發套件。有關哪些 VC++ 可轉散發版本可接受的資訊,請參閱平台支援和先決條件

  • 如果您的程式碼使用 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 中列出的某些目錄中。