我在使用Qt 4.8.6的OS X上遇到了一个非常奇怪的崩溃。
我有一小段非常简单的代码(它在我们的Windows和Linux版本中工作得很好):
QStringList list;
list << "test";
我发现append操作将在运行时崩溃,并显示以下堆栈跟踪:
QBasicAtomicInt::ref() { asm volatile("lock\n" ... }
QString::QString(QString const&)
QString::QString(QString const&)
QList<QString>::node_copy(QList<QString>::Node*from, QList<QString>::Node*, QList<QString>::Node*)
QList<QString>::detach_helper_grow(int, int)
QList<QString>::append(QString const&)
QStringList::operator<<(QString const&)
大多数其他操作,包括QStringList的析构函数,都会导致类似的崩溃。
我真的不知道如何进一步调试,任何建议都将不胜感激。
谢谢!
发布于 2016-02-05 05:24:33
这看起来像是一个典型的例子,Qt库是由不同的编译器构建的,或者由与应用程序的其余部分不同的C++库链接。在OS上,主要的罪魁祸首往往是libstdc++和libc++,它们的字符串实现不兼容,等等。
你能用一个简单的例子重现这个吗?例如:
qstringlist.pro:
SOURCES = qstringlist.cpp
qstringlist.cpp:
#include <QStringList>
#include <iostream>
int main(int argc, char *argv[]) {
QStringList list;
list << "test";
std::cout << list.join(" ").toStdString() << std::endl;
}
..then qmake qstringlist.pro && make && ./qstringlist.app/Contents/MacOS/qstringlist
为了解决这个问题,我通常自己构建Qt,如果我想在其他系统上运行,我会仔细选择构建设置。
发布于 2016-02-08 10:03:40
我们最终找到了它,发现我们所链接的Qt库已经修改了头文件,我们的构建系统没有正确地拉入它们。我想这是一个教训,最好的方法是相信但要验证:)
感谢大家的帮助!
https://stackoverflow.com/questions/35215277
复制相似问题