临时笔记 日志 杂记

1 篇文章 0 订阅
1 篇文章 0 订阅

PyCharm快捷键:
Ctl+F7 	//高亮
Ctl+F 	//查找
F3 / Shift+F3	//正向/反向挨个浏览查找结果
Ctl+Shift+F10 	//运行当前编辑中的文件
Ctl+Alt+右箭头 	//回退到刚浏览处
Ctl+Alt+左箭头 	//前进到刚浏览处
Ctl+/ 			//多行选中后注释或者取消注释

命令行使用python:
查看当前python运行时的版本并进入python运行环境:python
退出python运行环境的CMD命令行:exit()
查看可使用的命令及帮助:pip
查看当前已经安装了的库:pip list
在线安装requests库:pip install requests

import os
os.getcwd()			//查看当前工作目录
os.chdir("e:")		//变更目录到E盘
os.chdir("E:\\work_ypl\\PycharmLearn\\PyQtProj\\res")	//变更目录到E盘目录E:\work_ypl\PycharmLearn\PyQtProj\res
os.listdir('.')		//显示当前目录下的所有文件和文件夹

/*挨个换行显示出当前目录下所有的文件*/
for p in os.listdir(os.getcwd()):
	if os.path.isfile(p):
		print(p)
		
/*挨个换行显示出当前目录下所有的文件夹*/
for p in os.listdir(os.getcwd()):
	if os.path.isdir(p):
		print(p)

/*打开CMD终端*/
os.system('start cmd')


/*安装使用pyqt5*/
pip install PyQt5			//安装使用pyqt5
pip install pyqt5-tools		//Qt Designer已经在Python3.5版本从PyQt5转移到了tools
.................... 		//从PyCharm中File->Settings->Tools->External Tools进入外部工具配置界面:配置外部QT designer
.................... 		//勾画QT界面设计,保存ui文件,暂定为 hello.ui
pyuic5 -o hello.py hello.ui	//cmd执行命令将ui文件转换生成Python代码文件 或者 PyCharm中使用External Tools中自己添加的PyUIC
//当前目录下,创建 main.py,贴入如下代码,给生成的ui文件创建程序入口:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import hello
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = hello.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
.....................		//运行入口文件 main.py,即可调用打开QT设计的ui界面软件

jdk1.8:
安装完成后,检查是否安装OK,cmd命令行输入:java -version
查看jdk信息,输入: javac 

接下来对软件WebStorm进行注册破解,首先以记事本的方式打开hosts文件,将代码添加至hosts文件屏蔽网络联网;
hosts文件默认目录【C:\Windows\System32\drivers\etc】
0.0.0.0 account.jetbrains.com
0.0.0.0 www.jetbrains.com



Win32OpenSSL-1_0_2u
OpenSSL版本: "OpenSSL 1.1.1b  26 Feb 2019"

Win32OpenSSL-1_1_1e
OpenSSL版本: "OpenSSL 1.1.1b  26 Feb 2019"

Win64OpenSSL-1_1_1e
OpenSSL版本: "OpenSSL 1.1.1b  26 Feb 2019"

qt-opensource-windows-x86-5.11.1
只有migW32位

qt-opensource-windows-x86-5.12.0
只有migW64位

qt-opensource-windows-x86-5.12.4
各种版本都有

>>>>>>>>>>>>>>>>>>
QT       += core gui serialport network axcontainer

RC_FILE  += myico.rc

#LIBS += -L$$PWD/lib -lssleay32
#LIBS += -L$$PWD/lib -llibeay32
#LIBS += -L$$PWD/lib -lssleay32
#LIBS += -L$$PWD/lib -llibeay32
INCLUDEPATH += $$quote(C:\Program Files\OpenSSL-Win64-Win64OpenSSL-1_0_2u\include)

LIBS +=$$quote(C:\Program Files\OpenSSL-Win64-Win64OpenSSL-1_0_2u\libeay32.dll)
LIBS +=$$quote(C:\Program Files\OpenSSL-Win64-Win64OpenSSL-1_0_2u\libssl32.dll)

RESOURCES += \
    image.qrc
<<<<<<<<<<<<<<<<<<<<<<<<


/*---------------------------------VSCODE------------------------------------------------
打开命令行 (>)#
Ctrl + Shift + P

常用快捷键#
Ctrl + P  打开扩展管理器

Ctrl + Shift + K 删除当前行

Ctrl + B  显示/隐藏侧边栏

>open workspace settings json  //可在当前文件夹下创建一个叫 .vscode 的文件夹,并在其下生成一个叫做settings.json的文件
>c++ edit configurations json  //可在当前文件夹下创建一个叫 .vscode 的文件夹,并在其下生成一个叫做c_cpp_properties.json的文件
---------------------------------------------------------------------------------*/

************************************//


git@gitlab.hw.com:benliu/E10_Charge.git

打包QT项目运行程序依赖库:
1)打开QT命令行
	D:\Qt\Qt5.12.5\5.12.5\msvc2017
2)进入目录bin
	cd bin
3)使用可执行程序windeployqt.exe打包QT环境编译的DEBUG目录
	如:
	windeployqt.exe E:\work_ypl\5_CANTestQT\CANTe
stQTMM\build-CANTestQTMM-Desktop_Qt_5_12_5_MSVC2017_32bit-Debug\debug


C:\Windows\System32\drivers\etc 目录下找到
hosts文件,在最末增加行信息
192.168.70.38       gitlab.hw.com
配置完成后,ping网址gitlab.hw.com,则相当于ping IP 192.168.70.38


cat ~/.ssh/id_rsa.pub	//查看用户目录下的文件.ssh/id_rsa.pub


git rm -r --cached .  //有时候,gitignore考虑不全面,发现有不该提交的文件已经提交后,仅仅在.gitignore中加入忽略是不行的。这个时候需要去掉已经托管的文件
git add .
git commit -m 'update .gitignore'


git diff                                       查看尚未暂存的文件更新了哪些部分
 
git diff filename                   查看尚未暂存的某个文件更新了哪些
 
git diff –-cached                           查看已经暂存起来的文件和上次提交的版本之间的差异
 
git diff –-cached filename               查看已经暂存起来的某个文件和上次提交的版本之间的差异
 
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异
 
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个文件之间的差异
eg:git diff 1cef30f:./E10_APP/App/App_Main.c 22beccd:./E10_APP/App/App_Main.c

git diff commit-id1 commit-id2 --stat	//查看两个提交版本id修改了那些文件

【git pull = git fetch + git merge】
// 抓取origin仓库master分支的代码
git fetch origin master
// 将origin仓库master分支的代码与当前分支的代码合并(先fetch再merge)
git merge origin/master
// 将origin仓库master分支的代码与当前分支的代码强制合并
git merge origin/master --allow-unrelated-histories
// 查看合并后的情况(包括冲突文件)
git diff


1)创建git仓库:
git init
2)用cmd命令行创建一个.gitignore
rename 111.txt .gitignore     //111.txt为自己在工程目录下创建的文件
3)添加文件到仓库
git add .
4)发布到本地
git config --global user.email "1442533282@qq.com"
git config --global user.name "ypl"
git commit -m 'init'
git commit -m '初始版本'          //':表示换行  ":不能换行
git commit --amend //命令(叫追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中)
5)查看发布版本历史,方法如下三种:
	git log                  //显示从最近到最远的显示日志
	git log –-pretty=oneline //嫌上面显示的信息太多的话,可以单行显示
	git log -1               //查看版本库里最近的一版
	git reflog               //可获取到历史记录的各个版本号变更细节
	git log --graph --pretty=oneline --abbrev-commit  //查看版本前后变更信息
6)对比差异
git diff
7)git status
查看是否还有文件未提交
8)回退版本,方法有如下几种:
	1) 第一种即是我们从服务器上选取我们需要的版本,直接进行挑拣,在服务器的提交管理页面上右上方一般会有一个Download按钮,点击会弹出一个下拉框,选择其中的cherry-pick,复制命令,
	2) 使用gitk或其他的图形界面化工具,在终端输入 gitk,回车,会弹出gitk的图形界面,在界面的左侧部分陈列着版本库中的一条条commit-id,此时选中我们需要的那一版,右键点击之后会弹出一个选择菜单,如果是在master  分支上,那么其中会有一项是 Reset master branch to here,点击这项,会弹出一个名为confirm reset的确认box,选择reset type 中的hard项,再点击OK,关闭gitk图形界面,回到终端。
	3) 如果我们不知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以使用git log来查看版本库中的commit-id,找到我们需要的commit-id后,在终端中执行
	   git reset --hard commit-id 。//恢复为本地仓库中指定的版本
	4)git reset --hard HEAD^   //把当前的版本回退到上一个版本
	   git reset --hard HEAD^^  //回退到上上个版本	
  【最后】,无论哪种方式操做完后,还需要运行git log -1 命令,我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令(叫追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中),之后git push.
9)git commit -a -m “massage”
-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区,注意,新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用-a参数,正常的提交还是使用git add先将要改动的文件添加到暂存区,再用git commit 提交到本地版本库。
10)git checkout -- filename //可以丢弃工作区对文件filename的修改,把文件filename在工作区做的修改全部撤销,恢复为之前刚添加到暂存区后的状态
                注意:命令git checkout -- readme.txt 中的 -- 很重要,如果没有 -- 的话,那么命令变成创建分支了。
11)如果想要删除暂存区的内容,可以用reset回退或者:
 git stash			//把暂存区和工作区的变化内容暂时保存隐藏起来
 git stash pop		//恢复数据,只是恢复到工作区
 git checkout -- .	//放弃当前工作区的所有数据修改


1,远程仓库:
1)创建SSH Key:
  1.1) C:\Users\admin目录下打开git命令行,输入如下命令:
ssh-keygen -t rsa –C “1442533282@qq.com”
  1.2) 登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴xxx.pub文件的内容。
2)初次提交到远程GitHub仓库:
git remote -v //显示远程仓库当前链接
git remote rm origin //删除当前远程仓库链接
git remote add origin https://github.com/Paulliam/xxxxxx.git //添加新的远程仓库链接
git remote add origin git@github.com:Paulliam / test.git
git push -u origin master    //由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
3)以后更新提交,使用如下命令:
git push origin master
2,从远程库克隆到本地
git clone https://github.com/Paulliam/testgit
3,克隆到本地后,要在dev分支下做开发,需要创建远程的origin的dev分支到本地来,可以使用命令创建本地dev分支
git checkout –b dev origin/dev   //本地dev分支将匹配远程origin/dev分支


六:创建与合并分支。
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name  //合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息
	                  git merge –-no-ff -m “注释” name  //使用带参数 –no-ff来禁用”Fast forward”模式
删除本地分支:
git branch –d name
删除远程分支:
git push origin --delete name
【git 删除远程分支br】
git push origin :br  (origin 后面有空格)

创建+切换分支:
git checkout –b dev
先提交新建的文件或者是修改的文件,
git add .
git commit -m "提交说明"
最后把分支更新到远程仓库:
git push origin dev

1,
git checkout –b dev  //命令加上 –b参数表示创建并切换到分支dev,相当于如下2条命令
git branch dev
git checkout dev
2,
git branch   //查看本地分支,会列出所有的分支
git branch -a  //查看本地分支和远程分支
git branch -r  //单独查看远程分支
3,
git merge dev   //把dev分支上的内容合并到分支master上 //合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息
git merge –-no-ff -m “注释” dev  //使用带参数 –no-ff来禁用”Fast forward”模式
4,
git stash        //把当前工作现场 ”隐藏起来”,保存起来,
git stash list   //查看工作现场 
git stash apply  //恢复现场,恢复后,stash内容并不删除, 可以恢复到不同的分支下
	git stash apply stash@{0}	//指定恢复某一个缓存,此处为第0个
git stash drop   //你需要使用命令git stash drop来删除最近压入的一条现场
	git stash drop stash@{0}	//指定删除某一个缓存,此处为第0个
git stash pop    //另一种方式,恢复现场的同时把stash内容也删除了
	git stash pop stash@{0}	//指定恢复并删除某一个缓存,此处为第0个
git stash clear		//删除所有存储的现场
git stash show		// 显示stash的,有变更代码的相关文件是哪些
	git stash show stash@{0}	//指定显示某一个缓存,此处为第0个

1、将项目拷贝到test目录下
2、git add .
3、git status
4、git commit -m '第二次提交'
5、ssh-keygen -t rsa -C 'xxxxx@qq.com'(gihub注册邮箱)
6、git remote add origin https://github.com/XXXXXX.git(仓库地址)
  若报错 fatal: remote origin already exists.  
    输入命令:$ git remote rm origin ,再输入上面的命令
7、git push -u origin master		
  若报错:To https://github.com/zhaofangmei/first-simple-blog.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/zhaofangmei/first-simple-blog.git'
先输入git pull origin master,再输入上面的命令


编译有错时,可能是修改了git的.gitignore配置和文件,这时需要重置项目
git reset --hard 26269c693b6ca165d393c3f12c44e9


【遇见问题1:现象描述】
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

【遇见问题1:解决办法】
//给之前没有关联的本地分支(后一个master),指定必须要关联的远程分支"origin/master"
$ git branch  --set-upstream-to=origin/master master	
//确认是否关联成功
$ git branch -vv	
	//演示结果-成功的:* master ff55367 [origin/master: ahead 1] test
	//演示结果-失败的:* master ff55367 test

【遇见问题2:现象描述】
本地不能显示远程的分支,本地执行
git fetch
git branch -r 

【遇见问题3:现象描述】
本地分支push到一个不同命的远程分支:
git push --set-upstream origin HEAD:<branch>
或者:
git push origin HEAD:<branch>

VIM编辑器:
1)按键盘左上角的"ESC"退出进入退出准备
2)输入冒号 “:”
3)三种方式退出:
	3.1) wq 保存退出
	3.2) q  正常退出
	3.2) q!  不保存退出
	3.2) !  强制退出


typedef union
{
	uint8_t data;
	struct{
		uint8_t chg_mode_error:1;	//充电模块故障
		uint8_t comm_error:1;		//通信故障
		uint8_t over_temp:1;		//过温度
		uint8_t over_vol:1	;		//过压
		uint8_t over_current:1;		//过流
		uint8_t low_vdc:1;			//直流电压过低
	}B;
}Error;

fromelf --bin --output .\output\bin\E10_S2_APP.bin .\output\E10_S2_APP.axf
fromelf --bin -o .\output\bin\@L.bin .\output\@L.axf
fromelf --bin -o "$L\bin\@L.bin" "#L"

fromelf --bin --output .\Bin\E9_OBC_GD32_software.bin ./Objects/E9_OBC_GD32_software.axf
fromelf --bin -o "$L\..\Bin\@L.bin" "#L"
fromelf --bin -o .\Bin\@L.bin .\Objects\@L.axf
fromelf --bin -o "$L\..\Bin\@L.bin" "#L"

..\Src\aaa.bat
.\copyhex.bat

fromelf --bin -o .\Out\bin\@L.bin .\Out\@L.axf
fromelf --bin --output .\Out\bin\x10_id2.bin .\Out\x10_id2.axf
.\tool\aaa.bat

/把axf文件转化生成为bin文件
//【WC_TX_MAIN】原边1
/*原版设置*/fromelf --bin --output .\output\bin\E10_MainApp.bin .\output\E10_MainApp.axf
fromelf --bin --output .\output\bin\E10_MainApp.bin .\output\E10_S1_APP.axf
fromelf --bin --output .\output\bin\@L.bin .\output\@L.axf
fromelf --bin -o .\output\bin\@L.bin .\output\@L.axf
fromelf --bin -o "$L\bin\@L.bin" "#L"  //生成的bin文件在axf文件同级目录bin文件夹里
fromelf --bin -o "$Lbin\@L.bin" "#L"  //不打斜杠也行,生成的bin文件在axf文件同级目录bin文件夹里
fromelf --bin -o "$L@L.bin" "#L"       //生成的bin文件在axf文件同级目录里
/*反斜杠也可以*/fromelf --bin -o ./output/bin/@L.bin ./output/@L.axf
//【WC_RX_N1】副边
/*原版设置*/C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe  --bin -o ./output/E10_RX_APP.bin ./output/E10_RX_APP.axf
C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe  --bin -o ./output/bin/E10_RX_APP.bin ./output/E10_RX_APP.axf
C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe  --bin -o ./output/bin/@L.bin ./output/@L.axf
/*反斜杠也可以*/C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o .\output\bin\@L.bin .\output\@L.axf
//【WC_TX_SUB】原边2
/*原版设置*/fromelf --bin --output .\output\bin\E10_MainApp.bin .\output\E10_MainApp.axf
fromelf --bin --output .\output\bin\E10_S2_APP.bin .\output\E10_S2_APP.axf

/* 设置MASK*/
//设置某比特MASK
#define BIT(x)                       ((uint32_t)((uint32_t)0x01U<<(x)))
//设置BITstart到BITend之间的bit位为1的MASK --(end>start)
#define BITS(start, end)             ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end))))
//读取变量regval的BITstart到BITend之间的几个连续位表达的数值
#define GET_BITS(regval, start, end) (((regval) & BITS((start),(end))) >> (start))
//用regval设置MASK的BITstart到BITend之间的几个连续位表达的值
#define SET_BITS(regval) (BITS(start,end) & ((uint32_t)(regval) << start))  /*!< write value to bit field */
ADC_ISQ(adc_periph) |= SET_BITS((uint32_t)(length-1U)); //设置寄存器ADC_ISQ(adc_periph)某位域(bit field)的值



#define DEBUG(format,...) printf("File: " __FILE__", Line: %05d: " format"\n", __LINE__, ##__VA_ARGS__)

#define DEBUG_PRINT(fmt,args...) printf("%s(%d)-%s -> " #fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##args);


#define DEBUG(format,...) printf("Date: "__DATE__",File: "__FILE__", Line: %05d: "format"\n", __LINE__, ##__VA_ARGS__)


#define CL_LOG(fmt, args...) printf("%s|" fmt, "dbg/(sys)", ##args);printf("\r\n");
//eg:
CL_LOG("start charger request."); //命令调用
//dbg/(sys)|start charger request.//输出结果

#define DBG_INFO(fmt, args...)  printf("\n\r[%s] " fmt, __FUNCTION__, ## args)
/*
ANSI  C 有几个标准的预定义宏,为:

__FILE__ : 当前源代码的文件名。

__LINE__: 当前源代码的行号。

__DATE__:当前的编译日期。

__TIME__:当前的编译时间

__FUNCTION__表示调试所在的函数


## args表示可变参数
*/



	__IO uint8_t SIM_UART0_RxBuff[8] = {0};
	__IO uint8_t SIM_UART1_RxBuff[8] = {0};
	__IO uint8_t SIM_UART2_RxBuff[8] = {0};
	
	uint32_t* pSIM_UART_RxBuff[] = {(uint32_t*)SIM_UART0_RxBuff,(uint32_t*)SIM_UART1_RxBuff,(uint32_t*)SIM_UART2_RxBuff};
	
	for(uint8_t i=0; i<8; i++)
	{
			
	}

	memset( (void*)pSIM_UART_RxBuff[1], 0, sizeof(pSIM_UART_RxBuff[1]) );
	uint16_t ccc = sizeof(pSIM_UART_RxBuff[1]);



	 uint8_t SIM_UART0_RxBuff[8] = {0};
	 uint8_t SIM_UART1_RxBuff[8] = {0};
	 uint8_t SIM_UART2_RxBuff[8] = {0};
	 uint16_t ccc;
	uint8_t *pp;
	uint8_t* pSIM_UART_RxBuff[] = {SIM_UART0_RxBuff,SIM_UART1_RxBuff,SIM_UART2_RxBuff};
	for(uint8_t j =0; j<3 ;j++)
	{
		pp = pSIM_UART_RxBuff[j];
			for(uint8_t i =0; i<8 ;i++)
			{
				pp[i] = i;
			}
	}

	 ccc = sizeof(*pSIM_UART_RxBuff[1]);	
	 ccc = sizeof(SIM_UART1_RxBuff);	
	memset( (void*)pSIM_UART_RxBuff[1], 0, sizeof(pSIM_UART_RxBuff[1]) );
	now =ccc;


【1】委托invoke:
用法1:
public void LOG(String text)
{
	try
	{
		this.textBox_Log.Invoke(
			new MethodInvoker(delegate
			{
				this.textBox_Log.AppendText(text + "\r\n");
			}
		 )
		);
	}
	catch (Exception ex)
	{

		MessageBox.Show(ex.Message);
	}
}
用法2:
private void updateControlColor(Control control, Color color)
{
	try
	{
		control.Invoke(
		new MethodInvoker(delegate
		{
			control.BackColor = color;
		}
	  )
   );
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.Message);
	}
}
用法3:
private void upItem(CanParameter item,bool result,uint taskType,object info)
{
	this.Invoke(new EventHandler(delegate {
		if (result)
		{
			pictureBox1.Image = Resources.yes;
			label4.Text = string.Format("{0} {1}", item.currentVal, currentParameter[comboBox2.SelectedIndex].unit);
		}
		else
		{
			pictureBox1.Image = Resources.no;
			label4.Text = string.Format("{0}", info);
		}
		pictureBox1.Visible = true;


		if(currentParameter[comboBox2.SelectedIndex].effect == 0 && (taskType == 2 || taskType == 4))
		{
			Log.info("该参数重启生效,现在重启");
			CanManager.SendCan(getRESET(false));
		}
	}));
}


/// <summary>
/// 发送命令被点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton2_Click(object sender, EventArgs e)
{
	int deviceType = getDeviceType();
	string vin = txtVin.Text;
	if (vin.Equals(""))
	{
		MessageBox.Show("先输入车辆VIN码!");
		return;
	}
	//参数key
	int controlCode = cbControlCode.SelectedIndex + 1;

	txtResult.Text = "正在向车辆:" + vin + "设置发送控制命令: " + cbControlCode.SelectedText+",预计花时1分钟,请耐心等待。";
	new Thread(new ThreadStart(() =>
	{
		string result = sendRemoteControl(vin, deviceType, controlCode);
		txtResult.Text = result;
	})).Start();
}

分享一下QT项目工程在不同电脑不同QT环境上编译和运行时出现问题的解决办法:

问题描述:工程编译时,报错:"E:\M1Card\lib\ssleay32.dll:-1: error: file not recognized: File format not recognized"
就算编译不报错,运行时也会出现底层串口数据无法送出的问题。电脑是win10的64位,QT5.12.1,我的电脑是win7的64位,QT5.13.1,查资料显示,QT环境5.12.4是一个分水岭,这个之前的版本依赖的第三方库OpenSSL 1.0.x系列的,QT5.12.4之后的版本依赖的是OpenSSL 1.1.x系列的。
办法)QT环境的版本需要搭配正确的第三方依赖库OpenSSL版本:
(1) OpenSSL免编译库文件的获取可以去网站http://slproweb.com/products/Win32OpenSSL.html下载,版本“Win32OpenSSL-1_0_2u”,“Win64OpenSSL-1_0_2u”“Win32OpenSSL-1_1_1e”,“Win64OpenSSL-1_1_1e”可尝试安装,我选择的是其exe安装的。
(2) 然后QT工程目录依赖的旧系列OpenSSL库文件“libeay32.dll,ssleay32.dll”或者新系列OpenSSL库文件“libcrypto-1_1-x64.dll,libssl-1_1-x64.dll”,以及头文件包“/include/openssl”需要去OpenSSL安装目录里提取。

(3)提取办法如下两种:
方法1) QT项目文件xx.pro,在QT环境下双击打开,在文件中编辑加入下列命令,以包含头文件和库文件

INCLUDEPATH += $$quote(C:\Program Files (x86)\OpenSSL-Win32-Win32OpenSSL-1_0_2u\include)
LIBS +=$$quote(C:\Program Files (x86)\OpenSSL-Win32-Win32OpenSSL-1_0_2u\libeay32.dll)
LIBS +=$$quote(C:\Program Files (x86)\OpenSSL-Win32-Win32OpenSSL-1_0_2u\libssl32.dll)


方法2) 加入库文件还可以通过在工程项目下自建一个空文件夹“lib”(用来存放OpenSSL库文件),然后编辑加入如下命令,以包含库文件,不过这种办法需要将OpenSSL库和头文件包复制到QT工程目录下

LIBS += -L$$PWD/lib -lssleay32
LIBS += -L$$PWD/lib -llibeay32

 

操作图片示例: 

 

打包QT项目运行程序依赖库:
1)打开QT命令行
    D:\Qt\Qt5.12.5\5.12.5\msvc2017
2)进入目录bin
    cd bin
3)使用可执行程序windeployqt.exe打包QT环境编译的DEBUG目录
    如:
    windeployqt.exe E:\work_ypl\5_CANTestQT\CANTe
stQTMM\build-CANTestQTMM-Desktop_Qt_5_12_5_MSVC2017_32bit-Debug\debug


C:\Windows\System32\drivers\etc 目录下找到
hosts文件,在最末增加行信息
192.168.70.38       gitlab.hw.com
配置完成后,ping网址gitlab.hw.com,则相当于ping IP 192.168.70.38

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值