Qt Creator for Mac:升級Xcode導致工程編譯出錯

工作使用的開發環境是Mac + Qt Creator 5.9.7,前段時間腦子發熱想要升級Xcode,於是從Xcode 10.2升級到Xcode 13.1,升級之後發現打開原來的Qt Creator項目編譯出錯了,主要有兩個錯誤:

  1. 項目中使用了libstdc++.6.0.9,但是Apple早就想把這個庫換到libc++了,所以新的MacOS SDK中沒有這個庫了。
  2. 編譯出錯,提示找不到sdk,我原來的系統是macOS X 10.14.6,升級到macOS X 10.15.1之後,SDK變了,原來的SDK被刪掉了,找不到也是自然的事情,但是Qt Creator就是“意識”不到這個變化。

第一個問題,解決辦法也簡單,從網上找到這個文件,拷貝到指定的地址即可。不過要注意一點,需要換到xcode-select指定的目錄。這個macOS換過位置。

第二個問題找了好久,表現是由qmake生成的cmake文件中:

CFLAGS        = -pipe -O2 -g $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.11 -Wall -W -Wall -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-unused-local-typedefs -fPIC $(DEFINES)
CXXFLAGS      = -pipe -stdlib=libc++ -O2 -g -std=gnu++11 $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.11 -Wall -W -Wall -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-unused-local-typedefs -fPIC $(DEFINES)

注意看,上面的-isysroot項,我嘗試對Xcode,Command Line Tools,以及Qt Creator進行刪除和重新安裝,都無法將這個參數值從MacOSX10.14.sdk升級到MacOSX10.15.sdk。網上查到的一些資料說,在pro文件中設置QMAKE_MAC_SDK指定爲MacOSX10.15.sdk,結果試了不行。後來在Qt Forum查到一個資料(Setup root macox SDK for qt)纔算是找到了正解。解釋是這樣的第一次安裝好並打開一個qt工程,Qt Creator會在當前用戶目錄下生成一個.qmake.stash文件,注意是隱藏文件,這個文件中設置了Qt 工程中要使用的各種參數,可以看一眼文件的內容(不必細看):

QMAKE_MAC_SDK.macosx.--show-sdk-path = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
QMAKE_MAC_SDK.macosx.--show-sdk-platform-path = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform
QMAKE_MAC_SDK.macosx.--show-sdk-version = 10.14
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CXX = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_FIX_RPATH = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool \
    -id
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_AR = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar \
    cq
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_RANLIB = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib \
    -s
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_SHLIB = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_ACTOOL = /Applications/Xcode.app/Contents/Developer/usr/bin/actool
QMAKE_CXX.INCDIRS = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/include \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include
QMAKE_CXX.LIBDIRS = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib
QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
QMAKE_CXX.QMAKE_APPLE_CC = 6000
QMAKE_CXX.QMAKE_APPLE_CLANG_MAJOR_VERSION = 10
QMAKE_CXX.QMAKE_APPLE_CLANG_MINOR_VERSION = 0
QMAKE_CXX.QMAKE_APPLE_CLANG_PATCH_VERSION = 1
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 4
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1
QMAKE_CXX.COMPILER_MACROS = \
    QT_COMPILER_STDCXX \
    QMAKE_APPLE_CC \
    QMAKE_APPLE_CLANG_MAJOR_VERSION \
    QMAKE_APPLE_CLANG_MINOR_VERSION \
    QMAKE_APPLE_CLANG_PATCH_VERSION \
    QMAKE_GCC_MAJOR_VERSION \
    QMAKE_GCC_MINOR_VERSION \
    QMAKE_GCC_PATCH_VERSION
QMAKE_XCODE_DEVELOPER_PATH = /Applications/Xcode.app/Contents/Developer
QMAKE_XCODE_VERSION = 10.2.1

文件中把Qt Creator使用的macOS X的SDK版本寫死了,如果SDK更新了,只能把這個文件刪掉,再打開Qt工程重新qmake一下,生成新的.qmake.stash文件。

隨便在網上搜一下這個問題發現有好多人碰到過,比如關鍵字爲:

fatal error: ‘string.h’ file not found #include_next <string.h>

Qt Creator for Mac的Debugger啓動失敗。查找資料(Troubleshooting Debugger)發現可以啓動調試之後,打開Window --> Views --> Debugger Log,就可以看到啓動調試器的過程中有什麼問題。我的電腦上發現原因是lldb啓動過程中,python腳本(/Users/hj/Qt5.9.7/Qt Creator.app/Contents/Resources/debugger/lldbbridge.py)中的print語法使用的是python 2的那種不帶括號的用法,需要打開這個腳本,把所有print的地方換成加括號的就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章