macOS 下编译 qt 静态版

前提

  • 安装 xcode
  • 安装 xcode command line tools

下载 qt-everywhere-opensource-src-5.7.1.tar.gz

tar -xzvf qt-everywhere-opensource-src-5.7.1.tar.gz
cd qt-everywhere-opensource-src-5.7.1
vi build.sh

build.sh

#!/bin/sh

./configure -static -debug-and-release -nomake examples -nomake tests -prefix ~/Qt/5.7.1_static_osx -qt-sql-sqlite -plugin-sql-sqlite -qt-libpng -qt-libjpeg -qt-zlib -qt-pcre -opensource -confirm-license -opengl -qt-freetype

chmod +x ./build.sh
./build.sh
make
make install

或者多核处理器

make -j8
make -j8 install

错误信息

编译 qt 5.7.1 下出现错误

fontdatabases/mac/qfontengine_coretext.mm:775:20: error: qualified reference to
      'QFixed' is a constructor name rather than a type in this context
    return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont)));

qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
修改为

return QFixed(int(CTFontGetUnitsPerEm(ctfont)));

qt/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.h

OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage);

改为

void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage);

qt/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.mm 改为

void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage)
{
    // Verbatim copy if HIViewDrawCGImage (as shown on Carbon-Dev)
    OSStatus err = noErr;

//    require_action(inContext != NULL, InvalidContext, err = paramErr);
//    require_action(inBounds != NULL, InvalidBounds, err = paramErr);
//    require_action(inImage != NULL, InvalidImage, err = paramErr);

    CGContextSaveGState( inContext );
    CGContextTranslateCTM (inContext, 0, inBounds->origin.y + CGRectGetMaxY(*inBounds));
    CGContextScaleCTM(inContext, 1, -1);

    CGContextDrawImage(inContext, *inBounds, inImage);

    CGContextRestoreGState(inContext);
//InvalidImage:
//InvalidBounds:
//InvalidContext:
//        return err;
}

推荐阅读更多精彩内容

  • 一、什么是Qt Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程...
    赵小胃阅读 1,346评论 0 3
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 5,684评论 0 17
  • (2017.8.1更新:Qt5.9.1完美移植,支持QML请看这篇:http://www.jianshu.com/...
    trumolong阅读 11,072评论 5 1
  • 想和你去看山 看你和山一起 成为满眼绿色 中的一点红 看你回眸一笑 看你万种风情 想和你去看海 看你和海一起 成为...
    简度_飞翔阅读 64评论 0 0
  • 《大话设计模式》第 7 章 - 代理模式 的 Swift 实现。 问题 “追求者”通过“代理”送礼物给“Schoo...
    su3阅读 33评论 0 0