在 macOS 上安装 PyQt4 时 C++ 标准库出现问题
Posted
技术标签:
【中文标题】在 macOS 上安装 PyQt4 时 C++ 标准库出现问题【英文标题】:Problem with C++ standard library when installing PyQt4 on macOS 【发布时间】:2020-05-04 12:00:07 【问题描述】:我正在尝试构建 PyQt 4,因为它被我需要运行的程序使用。
虽然使用单个命令 pip install PyQt5
安装 PyQt 5 很简单,但对于较旧的 PyQt 4 则无法做到这一点,人们建议从源代码构建它。
我已经按照PyQt4 Download 的建议安装了 SIP。
我还下载了 PyQt 4 并将其解压缩。现在,当我运行 python configure.py --verbose
时,我得到了
Stanislaw@home:PyQt4_gpl_mac-4.12.3 (master)*$ python configure.py --verbose
Determining the layout of your Qt installation...
/usr/local/bin/qmake -spec macx-g++ -o qtdirs.mk qtdirs.pro
make -f qtdirs.mk
g++ -c -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/local/etc/qt4/mkspecs/macx-g++ -I. -I/usr/local/Cellar/qt@4/4.8.7_6/lib/QtCore.framework/Versions/4/Headers -I/usr/local/Cellar/qt@4/4.8.7_6/lib/QtCore.framework/Versions/4/Headers -I/usr/local/include -I. -F/usr/local/lib -o qtdirs.o qtdirs.cpp
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
...
/usr/local/lib/QtCore.framework/Headers/qglobal.h:68:10: fatal error: 'algorithm' file not found
#include <algorithm>
^~~~~~~~~~~
我对 Qt/qmake 没有任何经验,但我猜这个旧版本的 PyQt 没有配置自己正确使用 macOS 的基于 Clang 的 C++ 工具链。
我会继续挖掘,但我也想知道这个问题是否存在简单的解决方案。
【问题讨论】:
【参考方案1】:这可能不是构建 PyQt 4 的最佳/正确方法,但我构建了它,现在我的程序正在运行。
以下解决方案需要安装 Qt。我installed它与
brew install cartr/qt4/pyqt@4
现在是 PyQt 部分。
PyQt 安装包括 3 个步骤:
python configure.py
make
make install
使python configure.py
步骤工作
我必须在 configure.py
文件中更改它:
-qt_macx_spec = 'macx-g++'
+qt_macx_spec = 'macx-llvm'
在第二步,当运行make
时,我得到了和以前一样的错误,但这次它来自生成的 Makefile。事实证明,将 -mmacosx-version-min=10.5
标志中的版本增加到 -mmacosx-version-min=10.10
(通过在所有生成的 Makefile 中替换此行)使错误消失。
(我对此的解释是,更高版本的 macOS SDK 不使用 GCC 的旧 C++ 标准库,而是使用其较新的 Clang C++ 工具链的 C++ 库。)
之后,当我运行基于 PyQt4 的应用程序时,我点击了:
ImportError: No module named sip
找到了解决方案here:我不得不用附加标志重建 SIP:
cd sip-4.19.22
# `make clean` is important otherwise rebuilding will not work
# your program might complain with
# "ValueError: PyCapsule_GetPointer called with incorrect name"
make clean
python configure.py --sip-module PyQt4.sip
【讨论】:
以上是关于在 macOS 上安装 PyQt4 时 C++ 标准库出现问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MacOS 上使用 OpenCV 链接 C++ 程序 [重复]