QT+winodow 代码适配调试总结(二)

已经好多年了, linux环境下不同版本的QT程序开发和部署,突然需要适配window环境程序调试,一堆大坑,还真是一个艰巨的任务,可是kpi下的任务计划,开始吧!!

1、首先我们自定义的动态库,大多数不规范,所谓跨平台,只能说是QT本身的框架,实际自定义的动态库极其不规范, 大多数的动态库没有实现功能独立的功能,数据重定义和相互依赖是很头疼的事情,趁此机会斩断互相的网,逐步完成动态库的window适配,根据window环境的要求实现;

简单梳理一下过程:

A:自定义动态库中的总会有一个全局的文件,定义库导入和导出的宏

#ifdef AMS_SERVERDLL_EXPORTS

#define MODBUSTCP_AMS_SERVERDLL_API Q_DECL_EXPORT

#else

#define MODBUSTCP_AMS_SERVERDLL_API Q_DECL_IMPORT

#endif

B: 重点注意pro文件中需要包含:

DEFINES += AMS_SERVERDLL_EXPORTS

C: 对于暴露给外部调用的类,需要增加MODBUSTCP_AMS_SERVERDLL_API的约束,否则主程序调用会提一堆:LNK2019: 无法解析的外部符号

2、其次:linux环境移动过来的动态库编码格式不统一,网上很多高招,尝试一遍不是很理想,尽管各种位置的设置UTF-8 , 代码中中文字符和中文注释成了调试的大问题,莫名其妙的问题,总结一下终极的方案: 下载安装Notepad++ 工具,针对莫名其妙问题的代码进行格式转换,转为UTF-8 BOM格式保存,问题就会解决成千上万;

3 另外程序运行之后弹窗和打印的日志为乱码,问题不是很严重,也很容易解决,方案如下:

在项目文件pro文件中增加下面语句:

复制代码
win32:msvc{    
        QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8
}

4 对于调用mysql驱动的问题,linux环境需要安装mysql的客户端,window环境下不需要安装,但是需要可执行程序的位置拷贝libmysql.dll 驱动文件。

5、linux环境下 数据初始化可以使用变量初始化,但window环境下不允许

例如:

int iDataCnt = 100;

int iParamiDataCnt ;

这种linux环境下可以,但window环境不可以,window环境下不能使用变量,可以使用宏定义

int iParam100; 或者

#define DATA_CNT 100

int iParamDATA_CNT;

6、类似数据函数和宏定义M_PI window 无法识别,需要再pro 增加

DEFINES += _USE_MATH_DEFINES

7、其他入结构体对象和qvector赋初值,不允许直接通过 {}的方式,需要通过对象的单独赋值

例如:

Act act;

act.act = false;

act.row = 12;

act.col = 34;

不允许

Act act{false, 12, 34};

其他的问题有时间继续补充。

相关推荐
进制树17 分钟前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
牛马也想出海40 分钟前
亚马逊爬虫代理IP:IP类型选择与配置指南
开发语言·php
菜冻鱼1 小时前
Python-pytorch-高级技巧
开发语言·人工智能·pytorch·python·深度学习·神经网络·聚类
lpfasd1231 小时前
python webview打包版卡死、开发版正常
开发语言·python
weixin_461408581 小时前
npm npx yarn
开发语言·前端·javascript
菜冻鱼1 小时前
Python-pytorch-模型保存与加载
开发语言·人工智能·pytorch·python·深度学习·机器学习
骇客野人1 小时前
Java SSO 统一认证方案
java·开发语言
Code额2 小时前
Python 连接 DeepSeek API,OpenAI
开发语言·python·ai·ai编程
-凌凌漆-3 小时前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q3 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++