-mthreads on mingw 4.8.2(在Fedora 20上)现在产生lihnking错误 - 我应该同时使用-mthreads和-pthread吗?

时间:2014-04-22 13:13:58

标签: pthreads mingw mingw-w64

我刚刚升级到Fedora 20进行交叉编译项目。 Fedora 20正在使用MinGW 4.8.2-1.fc20。我的代码主要在那里,但是我在链接时获得了许多对pthread_mutex_init和其他pthread互斥函数的未定义引用。我正在使用-mthreads选项进行链接,因为我的代码是多线程的并且使用了异常。

如果我说-pthread,链接错误就会消失。看起来没那么正确的想法。

这是一个小型测试程序:

#include <pthread.h>

int main(int argc,char **argv)
{
    pthread_mutex_t M;
    pthread_mutex_init(&M,0);
    exit(0);
}

示例编译:

$ x86_64-w64-mingw32-g++ -mthreads x.cpp
/tmp/ccqTnLlg.o:x.cpp:(.text+0x21): undefined reference to `pthread_mutex_init'
collect2: error: ld returned 1 exit status
$

我可以让它消失:

$ x86_64-w64-mingw32-g++ -mthreads x.cpp -pthread
$

但这似乎不对。

对于那些不熟悉-mthread内容的人,以下是手册页中的部分:

   -mthreads
       Support thread-safe exception handling on MinGW.  Programs that rely on thread-safe exception handling must compile and link all code with the
       -mthreads option.  When compiling, -mthreads defines "-D_MT"; when linking, it links in a special thread helper library -lmingwthrd which
       cleans up per-thread exception-handling data.

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您正在使用pthread,因此请使用-pthreads-mthreads是另一回事。