我正在尝试为跨平台的开源计算机游戏(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库的一个基本部分一起使用。
有人可以帮忙吗?我应该非常感激。