Qt用mingw編譯使用外部庫
❶ Qt+GDAL開發筆記(一):在windows系統mingw32編譯GDAL庫、搭建開發環境和基礎Demo
前言
在麒麟系統上進行全球北斗定位終端開發時,調試工具製作一個Windows版本以便校對,北斗GPS發送的是大地坐標,應用需要的是經緯度坐標。轉換過程中,我們選擇了GDAL庫進行轉換,避免使用公式計算的繁瑣與可能的誤差。
注意
不建議使用mingw32版本的GDAL庫進行編譯,過程異常曲折。
大地坐標簡介
大地坐標(Geodetic coordinate)在大地測量中以參考橢球面為基準面,地面點P的位置由大地經度L、大地緯度B和大地高H確定。
原理
大地經度是參考橢球面上點與起始大地子午面(通過格林尼治天文台的子午面)之間的夾角,向東為東經,向西為西經。大地緯度是法線與赤道面的夾角,由赤道面起算,向北為北緯,向南為南緯。大地高是地面點到參考橢球面的距離。
北京54坐標系(BJZ54)
北京54坐標系基於克拉索夫斯基橢球,是通過局部平差後產生的坐標系,由經度L54、緯度M54和大地高H54表示。
世界大地坐標系統(WGS-84)
WGS-84坐標系是世界大地坐標系統,使用WGS-84橢球體,原點設在地球中心,X軸指向格林尼治參考子午線與赤道面的交點,Z軸指向地極方向,Y軸與X、Z軸構成右手坐標系。
國家大地坐標系(CGCS2000)
CGCS2000是當前最新的國家大地坐標系,原點設在包括海洋和大氣的整個地球的質量中心,X軸指向格林尼治參考子午線與赤道面的交點,Z軸指向地極方向。
GDAL庫介紹
GDAL(Geospatial Data Abstraction Library)是一個開源柵格空間數據轉換庫,支持各種文件格式,提供命令行工具進行數據轉換和處理。OGR是GDAL的一個分支,支持矢量數據。
功能與特徵
OGR體系結構
GDAL下載地址
GDAL的下載地址為:gdal.org/download.html,選擇3.2.1版本。
准備MSYS2環境
在MSYS2中配置編譯環境,可能遇到系統枚舉未知問題,嘗試使用msys2或msys642解決,確保成功編譯。
使用Qt5.9.3 mingw32進行編譯
將Qt5.9.3 mingw32編譯器復制到MSYS2根目錄,確保引入成功。
路徑配置與編譯GDAL
配置路徑、編譯GDAL,包括下載、解壓、配置、編譯和安裝步驟,遇到問題時使用強制方法解決問題。
編譯PROJ6
類似步驟進行下載、解壓、配置、編譯和安裝PROJ6,解決可能遇到的問題。
編譯sqlITE3
下載、解壓、配置、編譯和安裝SQLITE3,解決配置錯誤,確保庫正確編譯。
編譯pkgconfig(廢棄步驟)
嘗試編譯pkgconfig,但由於廢棄不再使用,此步驟僅保留。
結尾
經過一系列嘗試與優化,成功編譯並安裝GDAL、PROJ6和SQLITE3庫。建議讀者避免使用mingw32版本的GDAL庫,以簡化編譯過程。
❷ QT用VS還是MINGW編譯好,有什麼區別
MinGW 兼容性更好,調試也更方便。
VS生成的 exe 發布時依賴的 dll 少一些,其他都不如 mingw。
❸ 如何使用IDE為Qt Creator編譯器為mingw的方式編譯RakNet
RakNet解壓准備Ok,Creator、mingw、CMake准備OK,下面進入步驟:
打開 RakNet 目錄下的 CMakeLists.txt 文件,找到第44行:set( RAKNET_INCLUDE_DIRS ${RAKNETHEADERFILES} ${RAKNET_INCLUDE_ONLY_DIR} PARENT_SCOPE )
更改為:
set( RAKNET_INCLUDE_DIRS ${RAKNETHEADERFILES} ${RAKNET_INCLUDE_ONLY_DIR} )
打開 RakNet 目錄做扒下的 Lib\DLL 目錄下肢胡高的 CMakeLists.txt 文件,它是生成動態鏈接庫的,找到第13行:SET( CMAKE_CXX_FLAGS "/D WIN32 /D _RAKNET_DLL /D _CRT_NONSTDC_NO_DEPRECATE /D _CRT_SECURE_NO_DEPRECATE /GS- /GR- ")
更改為:
SET( CMAKE_CXX_FLAGS "-D WIN32 -D _RAKNET_DLL -D _CRT_NONSTDC_NO_DEPRECATE -D _CRT_SECURE_NO_DEPRECATE ")
打開 RakNet 目錄下的 Lib\LibStatic 目錄下的 CMakeLists.txt 文件,它是生成靜態鏈接庫的,找到第12行:SET( CMAKE_CXX_FLAGS "/D WIN32 /D _RAKNET_LIB /D _CRT_NONSTDC_NO_DEPRECATE /D _CRT_SECURE_NO_DEPRECATE /GS- /GR- ")
更改為:
SET( CMAKE_CXX_FLAGS "-D WIN32 -D _RAKNET_LIB -D _CRT_NONSTDC_NO_DEPRECATE -D _CRT_SECURE_NO_DEPRECATE ")
找到第22、23行:
ELSE()
set_target_properties(RakNetLibStatic PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB:"LIBCD.lib LIBCMTD.lib MSVCRT.lib"" )
刪除這兩行歷尺
打開 RakNet 目錄下的 Source 目錄下的 UDPForwarder.cpp ,找到第244行:&& errno!=EWOULDBLOCK
更改為:
&& errno!=WSAEWOULDBLOCK
打開 RakNet 目錄下的 Source 目錄下的 DR_SHA1.h ,找到第172行:#define TCHAR char
更改為:
#include <tchar.h>
Ok ,點下「構建項目」的按鈕,開始祈禱吧!
經過一段不算長的時間等待,除了少許字元類型警告外,RakNet 已經成功編譯出了mingw下的靜態庫:「libRakNetLibStatic.a」,動態庫:「libRakNetDLL.dll、libRakNetDLL.dll.a」 。
我使用以下代碼進行簡單測試:
#include "MessageIdentifiers.h"
#include "RakPeerInterface.h"
#include "RakNetStatistics.h"
#include "RakNetDefines.h"
#include "RakNetTypes.h"
int main(int argc, char *argv[])
{
RakNet::RakPeerInterface *server = RakNet::RakPeerInterface::GetInstance();
RakNet::RakPeerInterface::DestroyInstance(server);
return 0;
}
❹ Qt+MySql開發筆記:Qt5.9.3的mingw32版本編譯MySql8版本驅動並Demo連接資料庫測試
前言
為了實現更好的跨平台兼容,本文將詳細介紹如何在Qt5.9.3 mingw32版本下編譯MySQL8版本的驅動庫,並通過示例連接資料庫進行測試。具體操作將涉及環境配置、驅動編譯、庫替換、應用構建和資料庫配置等步驟。
編譯環境
本示例使用Qt5.9.3與mingw32環境,確保在開發環境中選擇源碼安裝選項。同時,下載並安裝MySQL-installer-community-8.0.16.0。
下載資料庫
從 downloads.mysql.com/arc... 獲取32位驅動運行程序並解壓。
編譯MySQL驅動庫
步驟一:安裝Qt5.9.3並勾選mingw32版本。
步驟二:下載並解壓32位資料庫運行包。
步驟三:在Qt Creator中打開MySQL源碼工程。
步驟四:執行qmake並進行構建。
構建成功後,庫將生成在根目錄下。
步驟五:替換插件中的MySQL庫。
步驟六:將libmysql.dll拷貝至bin目錄,確保在運行環境可用。
步驟七:編譯應用並連接測試。
應用成功編譯並提示驅動連接無誤。
步驟八:配置資料庫賬號允許遠程操作。
修改資料庫用戶的配置,允許遠程登錄。
步驟九:測試遠程操作工具連接。
由於MySQL8加密規則變更,客戶端連接軟體不支持新的加密方式。調整資料庫用戶加密方式至舊驗證模式。
總結
通過本文,您已學會如何在Qt5.9.3 mingw32版本下編譯並配置MySQL8版本驅動庫,實現了與資料庫的成功連接。在進行應用打包時,確保libmysql.dll被正確復制,以確保跨平台運行無誤。