在64位机器上编译静态32位Qt
我有一个64位的Ubuntu机器。我已经成功地管理使用下面的配置选项在64位机器上编译静态32位Qt
-static
-release
-prefix /opt/Qt-5.8.1
-confirm-license
-nomake examples
-nomake tests
-opensource
-qt-xcb
-no-sql-psql
-skip qt3d
-fontconfig
配置和编译QT5 静态库现在,我想创建一个32位的静态Qt的构建。所以,我在配置时添加了一个额外的-xplatform linux-g++-32
选项。
但是,我得到了以下两个(无关?)错误
ERROR: Feature 'fontconfig' was enabled, but the pre-condition '!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig' failed.
ERROR: The OpenGL functionality tests failed! You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2], QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
我想我在这里失踪的小东西 - 像失踪的32位开发库。但是我不知道我应该在64位机器上安装什么来启用32位交叉编译。
如果上述错误有一个快速和简单的解决方法,那么请让我知道。
谢谢 Abhinav。
好的,让我回答我自己的问题。或者至少分享最终为我工作的东西。
背景
已经通过上述方式成功地建立了Qt的5一个Ubuntu 16.04 64位计算机上,然后成功创建64位静态链接执行我的项目,我现在看在32位中执行相同的操作。
问题
无法关闭上一组正确的配置选项和构建环境设置为32位
解
sudo apt-get install libfreetype6:i386
sudo apt-get install libfreetype6-dev:i386
然后在为Qt调用./configure
时更改以下选项。
-prefix (path-to-Qt32bit) -platform linux-g++-32 -I/usr/include/freetype2 -L/usr/lib/i386-linux-gnu
呼叫make
然后make install
。 现在,你将拥有(在64位机器上)的Qt的32位编译
疑难杂症
尽管做上述,我的项目产生的32位可执行文件将不会运行在一台32位机器上。
我认为这是我Qt版本的问题。
但事实证明,我正在Ubuntu-12.04机器上运行可执行文件。而在12.04发货的libfreetype
没有一些方法,如FT_Property_Set
。因此,我看到运行时错误undefined symbol
。
因此,即使可执行文件被编译,它也无法运行。 我的解决方案是安装Ubuntu 16.04(32位)。然后可执行文件顺利运行。
交叉编译Qt是一种噩梦。我建议在一个实际的32位系统上做(我使用VMware来运行一个32位的Linux发行版)。 –