Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux RHEL/apache上的QApplication/QThread崩溃(\uuu get\u tls\u addr返回0)_Linux_Apache_Qt_Rhel - Fatal编程技术网

Linux RHEL/apache上的QApplication/QThread崩溃(\uuu get\u tls\u addr返回0)

Linux RHEL/apache上的QApplication/QThread崩溃(\uuu get\u tls\u addr返回0),linux,apache,qt,rhel,Linux,Apache,Qt,Rhel,我们的应用程序只有在apache下的RHEL6上运行时才会崩溃(即使是作为httpd-X独立启动)。当使用自定义小型http服务器或在另一台Ubuntu机器下运行时,它工作正常 以下是堆栈跟踪: Program received signal SIGSEGV, Segmentation fault. 0x00007fffe8f96d9f in ?? () from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtCore.so.4 (gdb) bt #0 0x

我们的应用程序只有在apache下的RHEL6上运行时才会崩溃(即使是作为httpd-X独立启动)。当使用自定义小型http服务器或在另一台Ubuntu机器下运行时,它工作正常

以下是堆栈跟踪:

Program received signal SIGSEGV, Segmentation fault.
0x00007fffe8f96d9f in ?? () from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtCore.so.4
(gdb) bt
#0  0x00007fffe8f96d9f in ?? () from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtCore.so.4
#1  0x00007fffe8f93a39 in QThread::currentThread() () from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtCore.so.4
#2  0x00007fffe90a05bc in QCoreApplicationPrivate::QCoreApplicationPrivate(int&, char**, unsigned int) ()
   from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtCore.so.4
#3  0x00007fffe7cbec63 in QApplicationPrivate::QApplicationPrivate(int&, char**, QApplication::Type, int) ()
   from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4
#4  0x00007fffe7cc811c in QApplication::QApplication(int&, char**, int) () from /opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4
互联网上有几个类似的问题,但都没有列出任何答案:

根据Qt source,我认为
QThreadData::current()
返回NULL。但为什么会发生这种情况

现在,我通过反汇编发现,
\uu get\u tls\u addr
返回0(我想对于Qt静态threaddata变量)。现在,当我运行自定义http服务器而不是apache时,
\uu get\u tls\u addr
会返回有效的指针


我发现如果我将
-ftls model=initial exec
更改为
-ftls model=global dynamic
,那么它在RHEL/apache中工作。我仍然不明白的是为什么,apache的具体功能是什么。

初始exec和
本地exec
模型只对以
exec
开头的应用程序有意义。如果模块不是主模块,而是库,那么事情就应该失败。他们确实失败了

您发现,从库中使用TLS与构建独立可执行文件时使用不同的标志集。有人希望qmake mkspecs能够在相关编译器上处理这些问题


请参阅。

仅当应用程序以
exec
'd启动时,
initial exec
local exec
模型才有意义。如果模块不是主模块,而是库,那么事情就应该失败。他们确实失败了

您发现,从库中使用TLS与构建独立可执行文件时使用不同的标志集。有人希望qmake mkspecs能够在相关编译器上处理这些问题


请参阅。

既然这是一个服务器应用程序,为什么要使用
QApplication
而不是
QCoreApplication
?对于QCoreApplication,它会以同样的方式崩溃。明白。这仍然不能改变您应该使用
QCoreApplication
的事实。在没有显示器的Linux主机上启动的
QApplication
会发出抱怨,IIRC会在启动时死亡。最不幸的情况。你应该发布最后两段作为你问题的答案:)也许,但这不是答案,只是一个解决办法,除非我知道原因和我在做什么。因为这是一个服务器应用程序,为什么使用
QApplication
而不是
QCoreApplication
?对于QCoreApplication,它会以同样的方式崩溃。明白。这仍然不能改变您应该使用
QCoreApplication
的事实。在没有显示器的Linux主机上启动的
QApplication
会发出抱怨,IIRC会在启动时死亡。最不幸的情况。你应该把最后两段作为你问题的答案:)也许吧,但这不是答案,只是一个解决办法,除非我知道我为什么和我在做什么。这很有趣。我将尝试了解更多有关这方面的信息,但如果您提供更多详细信息的链接,我将非常高兴。我应该从“线程本地存储的ELF处理”开始吗?接受,尽管我将进行更多的研究。这很有趣。我将尝试了解更多有关这方面的信息,但如果您提供更多详细信息的链接,我将非常高兴。我应该从“线程本地存储的ELF处理”开始吗?尽管我将要进行更多的研究,但还是接受它。