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被正确复制,以确保跨平台运行无误。