The Tale of Genji

The Tale of Genji

 历时一月有余,终于通读了<源氏物语>(除宇治十帖以外)。自光源氏以降,至"云隐"之篇,共43帖矣,讲述了光源氏风流浪荡的一生。

- 阅读剩余部分 -

Qt使用预编译头PCH及多核编译加快编译

最近在用Qt做一些小项目的时候,发现Qt的编译很慢,理论上来说不应该有这样的问题的。查了一下Qt的文档以及在知乎上的问题为什么 Qt Creator 的编译如此之慢?,调整了一些设置以后好多了。

问题主要是出在在没有设置的情况下每一次编译Qt都会编译所有文件,这是不应该的。

  1. 预编译头文件

project.pro文件中,加入以下两行

CONFIG += c++11  precompile_header
PRECOMPILED_HEADER  = stable.h

stable。h中加入头文件,在开发阶段可以直接加入QWidgets,QtGui等重量级头文件,此后编译中就不会再对这些头文件进行处理了。注意,stable.h文件不要被包含在项目的任意角落里面。

  1. make启动多核编译

项目——构建设置——构建步骤——make的参数中,加入-jX选项,其中X为CPU线程数+1,如我的I7是四核八线程,此处应该为-j9
注:make的选项仅适用于MinGw编译。
MSVC编译器可以在pro文件中加入(未测试)

QMAKE_CXXFLAGS += /MP

Qt5.8 Patch: Missing "qtmultimediadefs.h"

详情请见:
https://bugreports.qt.io/browse/QTBUG-58432
这是被列在Qt5.8的等级为P1的Bug report,原因是在某次merge中移除了这个qtmultimediadefs.h这个文件,很多头文件的声明被更名到qtmultimediaglobal.h,并进行了一些其他的修改,但是在打包成安装包的过程中出现了一些问题,加粗部分的变动并没有打进安装包,导致所有引用了qtmultimedia功能的程序均无法编译。

在Linux中可以利用包管理器解决
这是Debian的软件包信息
https://packages.debian.org/stretch/qtmultimedia5-dev

在Windows中就要麻烦一点了
首先需要找到include的目录
我的目录在E:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtMultimedia中,找到qtmultimediadefs.h文件。

https://codereview.qt-project.org/#/c/184100/2/src/multimedia/qtmultimediadefs.h
中的信息复制到qtmultimediadefs.h

或者
升级到Qt5.9,在5.9中已经修复了此Bug

Debian利用Squid3搭建Pac代理,端口25

虽然平时都是用shadowsocks,但是偶尔在没有条件的时候也会用到Pac来救急(通常是在我的chromebook上),在网上找PAC不是个办法(也不安全),于是就萌生了搭建个PAC的想法。
顺着代码来,一行行复制
Debian

sudo apt install squid3
curl www.cutinlove.com/squid.conf > /etc/squid3/squid.conf
mkdir -p /var/cache/squid
chmod -R 777 /var/cache/squid
service squid3 stop
squid3 -z
service squid3 restart

这样squid3的服务就搭建完了,接下来只需要配置上pac就好了
可以直接下载到本地,将第一行的地址填上服务器的IP
https://raw.githubusercontent.com/rptec/squid-PAC/master/1.pac

也可以在服务端的网站可访问的目录配置好PAC,直接填上网站路径的PAC就可以了

如果不能正常工作,请在防火墙将25端口放行,或者检查VPS提供商是否封杀了25端口(25端口是电子邮件端口,部分VPS商为了防止垃圾邮件封杀了)