我刚刚升级到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.
有什么建议吗?
答案 0 :(得分:1)
您正在使用pthread,因此请使用-pthreads
。 -mthreads
是另一回事。