Qt 5.7 + QtWebKit 编译

Qt 5.7 已经不包含 QtWebKit 的预编译库了,需要使用的话得手动编译。
其实我就是想给 zeal (https://zealdocs.org/) 换上 Qt 5.7 测试 Qt 文档中的字体问题 (后来发现是没安装 Droid Sans Mono 造成的,停不下来了,编译已经开始了)。又不想用新的 QtWebEngine (因为是 MSVC only),同时说不定使用了 QtWebKit 需要移植。所以就开始编译一个 MinGW 版本的 QtWebKit 给自己用。

真是给自己挖了个大坑。

第一次尝试:单独编译 QtWebKit

需要指定 SQLITE3SRCDIRQTDIR
使用 Tools\Script\build-webkit --qt 进行编译
但出现两个问题:

  • 频繁出现的 icu 引用路径缺失 (之后才知道原来是需要外部 icu)
  • JSChar 与 UChar 定义不匹配 (char 与 wchar_t)

因此开始尝试使用 无 icu 依赖的编译方式
找到的 arch 的去除 icu 依赖的补丁,但补丁的应用非常麻烦,Windows 上的 patch (或单纯来讲 patch) 根本不会用。因此手动应用了补丁,然并卵,系统提示没有 Unicode 实现。

在官方的编译指南中 (https://trac.webkit.org/wiki/BuildingQtOnWindows) 发现提到了,编译时必须依赖 icu。但 Qt 5.7 默认去除了 QtWebKit 模块,因此 icu 也变成了可选 (当然了,意思就是不依赖了。原来之前带着 icu 就是因为 QtWebKit 呀) 。并且要编译 QtWebKit,整个 Qt 也需要启用 icu 编译选项。

所以要开始第二次尝试了。

第二次尝试:编译 Qt

编译 icu

当然了,需要首先编译 icu.

参照官方说明 (http://wiki.qt.io/Compiling-ICU-with-MinGW),使用:

./runConfigureICU MinGW prefix=$PWD/../dist

然后

make && make install

就好。

会在此 dist 文件夹内得到 include 和 lib 两个文件夹的内容。相信懂了。

需要注意的是,避免环境混用。我使用 cygwin 的 sh ,(链接 MinGW 的库时) 就出了问题。同时 Git 自带的 MSYS 环境也不能随便用,因为 bitness 的差异,32位 与 64位 的 MSYS 环境是冲突的。

因此另外安装个 MSYS 环境就好,注意 bitness 与 MinGW 编译器的一致。开始编译前检查 PATH 配置,重新设置最好,避免出错浪费时间。

编译 Qt

Qt 这么大的项目,能用 configure 通过简单配置即可编译,已经很不容易了。

参考一篇关于静态编译的说明 (http://blog.csdn.net/wsj18808050/article/details/42301561) 进行配置。

有几个需要注意的地方:
– QtWebKit 需要动态编译 (本来就没准备静态编译)
– 不要使用 -opengl dynamic 或者 angle 选项,而仅使用 -opengl desktop,除非你手头刚好安装了 DirectX 的 SDK。
– 启用 openSSL
– 启用 icu

最终使用的配置是:(路径仅作参考)

configure.bat -opensource -confirm-license -platform win32-g++ -mp -debug-and-release -prefix C:\Qt\5.7.0-ICU\ -qt-freetype -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I C:\OpenSSL\Win32\include -L C:\OpenSSL\Win32\lib -icu -I C:\icu\dist\include -L C:\icu\dist\lib -no-compile-examples -nomake tests -nomake examples -no-accessibility

一切正常就可以开始 make 了。到编译完成总共花了约 40 个小时,其中 WebKit 本身 30+ 小时。呵呵。

NX 9.0 安装小记

UG NX 算是能在 linux 环境下无痛流畅运行的唯一一个专业级的 CAD/CAM 软件。性能不错,也比较稳定。

就是本人非专业设计,也就用点简单的功能,杀鸡用了牛刀。

软件环境 openSUSE 13.2 x64,KDE 桌面环境。

 

下载安装文件

百度: http://pan.baidu.com/s/1gdAanwn

安装

事先安装 lsb, libXm 与 java 运行环境 (openJDK whatever)
root身份打开终端

1. 挂载

挂载 SIEMENS.NX.9.0.0.Linux64.img
mount -o ro,exec SIEMENS.NX.9.0.0.Linux64.img /media

2. 安装License Server

1)进入挂载文件夹

cd /media

2)运行 License Server 安装文件

./SPLMLicenseServer_v6.1.1_linux_setup.bin

注意选择安装的位置,我选择 /opt/Siemens/
当提示 License File 时,选择下载目录下 _SolidSQUAD_ 文件夹内的 splm6.lic
注意事先将 splm6.lic 内的 this_host 改成 当前的计算机名
lmgrd 应当不会正确运行,若已运行则杀掉

3. 安装 NX9

nx090/ug_install

留出约 10G 磁盘空间 (My poor SSD…)
注意选择安装的位置,我还是选择 /opt/Siemens/

破解

1. 将安装目录下 SIEMENS.PLM.NX.9.0.0.LINUX64-SSQ.tar.gz 内的内容解压并覆盖已安装的文件
2. 将 /opt/Siemens/PLMLicenseServer/ 内的 lmgrd ugslmd 的所有人改为当前用户 (仅单用户,多用户未测试,猜测应该主要是组;若不改普通用户无法运行)
3. 复制 splm6.lic/opt/Siemens/PLMLicenseServer/
运行

本人使用 zsh 其他终端类似,仅普通用户权限即可

1. 启动 License Server
在终端运行
LM_LICENSE_FILE=/opt/Siemens/PLMLicenseServer/splm6.lic /opt/Siemens/PLMLicenseServer/lmgrd

2. 启动 NX
UGII_ROOT_DIR=/opt/Siemens/ugs090/ugii SPLM_LICENSE_SERVER=28000@host_name (primusrun) /opt/Siemens/ugs090/ugii/ugmenu

3. 在 ugmenu 界面内继续操作…

补充

1. 关于 Bumblebee

optirun 速度快,延时低,但阴影渲染貌似有问题。第一次使用时崩溃。
primusrun 延时稍高,速度时快时慢看人品,阴影渲染ok,稳定。就是第一次运行时简单的模型卡出翔。

2. SSD 实在是没地方了,最后移动到了 HDD 上,在 /opt 做了个软链接

3. 没有 HiDPI 支持 (至少还没找到)

 

参考

1. Install UG NX 9.0 on Ubuntu 12.04

CuraEngine win64

试着编译了一下 CuraEngine 的64位版本。

Linux 64位编译毫无压力,到了 Windows 一堆问题。

用的 Linux + MinGW64 。

1. 自带的 Makefile 完全没有考虑到 win64 的情况嘛。(恩,只能手动解决了,比如整个cmake,或者qmake也行。反正没几个源文件,很随意)

2. nullptr 未定义。(gcc默认没有C++11支持。编译时加入 -std=c++11。我用 qmake 在pro里面加的 QMAKE_CXXFLAGS += -std=c++11 一个意思。

3. winsock相关符号链接时出错。(既不能什么也不写,也不能写 -lwinsock 因为 MinGW 没有这玩意。so 正确的姿势是 -lws2_32…)

4. 官方脚本默认是静态链接的,而这里默认是动态链接的,需要的查下 自带的 Makefile ,貌似有个 –static 的选项,加到哪忘了。

下载链接 http://pan.baidu.com/s/1sjLPbtV

没了。

zram 试用小记

最近用 Cura 处理大模型,巨大的内存占用让 8G 内存瞬间耗尽,剩下的就是无休止的swap。尤其是 kswapd0 CPU占用接近100%,同时I/O和CPU全满,基本啥也干不了,唯一能做的只有去泡杯咖啡然后等了。

在搜 kswapd CPU占用高时,发现了竟然有 zram 这样的神器,在内存中压缩交换分区的数据,提高速度的同时还减轻I/O的压力。

本人用 openSUSE,在 s.o.o 一搜,果然有。可以作为 systemd 的 service 运行。立马 branch 到自己的 repo 里。

安装后立刻启动服务会出现错误,推荐启用服务后重启。

本人系统内存 8G,实际可用 7.75G。原本设置的swap分区的大小为 8.56G,重启后系统显示交换分区大小为 16.31G,刚好是原本交换分区+可用物理内存之和。

使用 CuraEngine 尝试处理数据后发现,CuraEngine 占用内存约 5.6G,但出乎意料的是,在物理内存接近耗尽时,并没有立刻开始swap,而是系统物理内存依旧保持 130M 左右的空间。并且交换分区的利用率很低,处理进行到一半时,占用约为 110M 。同时系统运行流畅,没有出现I/O与CPU利用率过高的情况。开着 Chromium 写这篇文章,没有丝毫影响。

截图一张:

snapshot1

现在区泡杯咖啡,看着内存统计等交换分区占满…

Wine安装TM2013小记

平时还是离不开 QQ 的。在 Linux 上跑 QQ 的办法无非是 WebQQ、虚拟机、Wine 这么几种。

WebQQ 功能太弱,不能传图片文件;用虚拟机相比又很麻烦,等于开两次机。

记得很早以前,用 Wine 跑 QQ 不稳定,crash 是常事。最近貌似(大概是某次 Crossworks 的新版发布的时候)情况好多了。so …

于是网上搜了搜教程(在这里还有这里)照猫画虎,总结一下。

  1. 准备一个小工具 q4wine,省去很多命令行操作,很方便。
  2. 用 q4wine 创建一个32位的 prefix,名称任意。(注意必须是32位,后面会说明。)
  3. 用 q4wine 在 prefix 下运行 TM2013Preview1.exe。
  4. 运行 winecfg ,添加 riched20 库,并设置原装先于内建。(这样就够了,别用 winetrick 下载,这样需要下整个 win2k 的 sp4,129MB。)
  5. 用 winetricks 安装 ie7。(此时 prefix 如果是64位的,并且系统版本是默认的XP,winetricks会下载32位的安装包,安装时与系统不匹配导致安装失败。不论是 ie6 ie7 还是 ie8。)
  6. 这样应该就可以了。

注:

  • 操作系统 openSUSE 13.1 64bit。
  • 为什么用 TM2013? TM 与 QQ 核心功能基本相同,又没有广告和那个不是会员就不能去掉的那个新闻首页,何乐不为嘛。
  • 若不调整 riched20,安装完成后运行 TM,会发现无法输入账号。
  • 若不安装 ie7,TM 很容易在聊天过程中崩溃。目测原因是 QQ 秀 flash 神马的。
  • 装 ie7 是以前某个地方看到建议安装的,可是实在想不起来在哪了。
  • 这样安装完了TM显示的字体比较模糊。可能需要装 cjkfont 之类的组件,没试。
  • 最好把TM安装目录下Bin文件夹里面的 QQExternal.exe 和 TXPlatform.exe 删掉 ;-P

说完了。