在Linux中使用MinGW与pthreads交叉编译时未定义的引用`_imp__ptw32_push_cleanup'

时间:2017-01-14 16:41:08

标签: c++ pthreads mingw cross-compiling

我正在尝试为跨平台的开源计算机游戏(Simutrans-Experimental:Simutrans的一个分支)设置交叉编译。

它使用pthreads多线程库。在代码的一部分,我的fork(但不是原始版本)使用pthread_cleanup_push()和pthread_cleanup_pop()函数。

当我尝试交叉编译时(对于使用MinGW32的32位Windows),我收到以下编译器错误:

error: second operand to the conditional operator is of type âvoidâ, but the third operand is neither a throw-expression nor of type âvoidâ
 pthread_cleanup_pop(1);

(“推”等效的类似错误。)

Sim68rans标准版本的开发人员之一建议我将pthread.h的一部分修改为

 #define pthread_cleanup_pop(E)\
(*pthread_getclean() = _pthread_cup.next, ((E) ? (_pthread_cup.func((pthread_once_t *)_pthread_cup.arg)) : (void)0));}

然后允许代码编译。

但是,我现在得到与代码的相同部分相关的链接器错误:

===> LD  build/mingw/simutrans-experimental

build / mingw / simworld.o:simworld.cc :(。text + 0x1914):未定义引用_imp__ptw32_push_cleanup' build/mingw/simworld.o:simworld.cc:(.text+0x198b): undefined reference to _ imp__ptw32_pop_cleanup'     collect2:错误:ld返回1退出状态 common.mk:21:目标'build / mingw / simutrans-experimental'的配方失败

我不明白这里发生了什么,或者为什么mingw附带的pthread不能与pthreads库的一个基本部分一起使用。

有人可以帮忙吗?我应该非常感激。

0 个答案:

没有答案