关于Solaris构建问题的Mono5

关于Solaris构建问题的Mono5,mono,solaris,Mono,Solaris,我试图在Solaris 10上构建Mono,但遇到了一个错误“Posix系统不支持递归互斥”。我正试图用gcc 3.4.3来构建它,我已经安装了gmake、gar、granlib和gstrip来取代它们的Solaris替代品。我已经找到了一个可能的解决方案,但是我找不到引用这一行的blog“1)patch/usr/lib/pkgconfig/gthread-2.0.pc以替换位于的-mt选项(参见Jonel的blog)”。该博客不再处于活动状态。有人知道他们所指的补丁可能是什么吗?提前感谢。So

我试图在Solaris 10上构建Mono,但遇到了一个错误“Posix系统不支持递归互斥”。我正试图用gcc 3.4.3来构建它,我已经安装了gmake、gar、granlib和gstrip来取代它们的Solaris替代品。我已经找到了一个可能的解决方案,但是我找不到引用这一行的blog“1)patch/usr/lib/pkgconfig/gthread-2.0.pc以替换位于的-mt选项(参见Jonel的blog)”。该博客不再处于活动状态。有人知道他们所指的补丁可能是什么吗?提前感谢。

Solaris 10支持递归互斥锁

Per:

PTHREAD\u MUTEX\u RECURSIVE

试图重新锁定此互斥锁而不首先解锁它的线程 将成功锁定互斥锁。重新锁定死锁可能会导致 与类型为
PTHREAD\u MUTEX\u NORMAL的互斥体一起出现
这种类型的互斥。此互斥锁的多个锁需要相同的密码
在另一个线程启动之前释放互斥锁的解锁次数
获取互斥。试图解锁另一个互斥锁的线程
线程已锁定,将返回一个错误。一个试图
解锁解锁的互斥锁将返回一个错误。这种类型的互斥
仅支持进程共享属性为的互斥体
PTHREAD\u PROCESS\u PRIVATE

此外,根据手册页,所需的编译/链接选项和适当的
#include
语句:

cc –mt [ flag... ] file... –lpthread [ library... ]
#include <pthread.h> 
cc–mt[标志…]文件…–lpthread[库…]
#包括
注意添加了
-lpthread
。我怀疑你提到的博客说用
-mt-lpthread

替换
-mt
(我在这里重复的Unix问题推动了对这个问题的进一步研究)

您将
\u XOPEN\u SOURCE
设置为的确切值并不重要。Mono错误地定义了
\u XOPEN\u SOURCE\u EXTENDED
宏:

case "${host}" in
        *solaris* )
                AC_MSG_CHECKING(for Solaris XPG4 support)
                if test -f /usr/lib/libxnet.so; then
                        CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600"
                        CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
                        CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1" <-- WRONG
                        LIBS="$LIBS -lxnet"
\u XPG6
已定义:

/*
*_XOPEN_源的使用
*
*支持以下X/Open规范:
*
*X/Open便携性指南,第3期(XPG3)
*X/Open CAE规范,第4版(XPG4)
*X/Open CAE规范,第4期,第2版(XPG4v2)
*X/Open CAE规范,第5期(XPG5)
*开放式集团技术标准第6版(XPG6),也称为
*IEEE标准1003.1-2001和ISO/IEC 9945:2002。
*
*XPG4v2也称为UNIX 95(SUS或SUSv1)。
*XPG5也称为UNIX 98或单一UNIX规范,
*第2版(SUSv2)
*XPG6是X/Open和POSIX规范合并的结果
*因此,在中也被称为IEEE标准1003.1-2001
*添加到UNIX 03和SUSv3。
*
*按照规范编写合格的X/Open应用程序时
*根据要求,必须在以下位置定义适当的特性测试宏:
*编译时。这些措施如下。有关更多信息,请参见标准(5)。
*
*特性测试宏规范
* ------------------------------------------------  -------------
*XOPEN源XPG3
*源代码和版本=4 XPG4
*_XOPEN_SOURCE&&u XOPEN_SOURCE_EXTENDED=1 XPG4v2
*_XOPEN_源=500 XPG5
*_XOPEN_SOURCE=600(或POSIX_C_SOURCE=200112L)XPG6
*
*为了简化标头内的防护,请执行以下操作
*已创建实现专用测试宏。应用
*不得使用这些专用测试宏,因为会出现意外结果
*发生。
*
*请注意,通常情况下,这些专用宏的使用是累积的。
*例如,在X/Open上没有其他限制的情况下使用_XPG3
*命名空间将使XPG3到XPG6的符号可见
*编译环境。在没有其他X/Open的情况下使用_XPG4_2
*命名空间限制表示符号是在中引入的
*因此,XPG4v2通过XPG6编译对XPG4v2可见
*环境,但不适用于XPG3或XPG4编译环境。
*
*_XPG3 X/开放式便携性指南,第3期(XPG3)
*\u XPG4 X/开放式CAE规范,第4期(XPG4)
*_XPG4_2 X/Open CAE规范,第4期,第2版(XPG4v2/UNIX 95/SUS)
*_XPG5 X/Open CAE规范,第5期(XPG5/UNIX 98/SUSv2)
*_XPG6开放组技术标准,第6期(XPG6/UNIX 03/SUSv3)
*/
/*X/Open便携性指南,第3期*/
#如果定义(_XOPEN_SOURCE)&(_XOPEN_SOURCE-0<500)&&\
(_XOPEN_VERSION-0<4)和&!已定义(\u XOPEN\u SOURCE\u EXTENDED)
#定义_XPG3
/*X/Open CAE规范,第4版*/
#elif(已定义(\uxOpen\uSource)&&&uxOpen\uVersion-0==4)
#定义\u XPG4
#定义_XPG3
/*X/Open CAE规范,第4版,第2版*/
#elif(已定义(_XOPEN_SOURCE)&&&u XOPEN_SOURCE_EXTENDED-0==1)
#定义\u XPG4\u 2
#定义\u XPG4
#定义_XPG3
/*X/Open CAE规范,第5期*/
#elif(_XOPEN_SOURCE-0==500)
#定义_XPG5
#定义\u XPG4\u 2
#定义\u XPG4
#定义_XPG3
#未定义POSIX C_源
#定义POSIX_C_SOURCE199506L
/*开放式集团技术标准,第6期*/
#elif(_XOPEN_SOURCE-0==600)| |(_POSIX_C_SOURCE-0==200112L)
#定义_XPG6
#定义_XPG5
#定义\u XPG4\u 2
#定义\u XPG4
#定义_XPG3
#未定义POSIX C_源
#定义\u POSIX\u C\u源200112L
#未定义(XOPEN)源
#定义_XOPEN_源600
#恩迪夫

wayback机器有一份日志副本。
/*
 * It is invalid to compile an XPG3, XPG4, XPG4v2, or XPG5 application
 * using c99.  The same is true for POSIX.1-1990, POSIX.2-1992, POSIX.1b,
 * and POSIX.1c applications. Likewise, it is invalid to compile an XPG6
 * or a POSIX.1-2001 application with anything other than a c99 or later
 * compiler.  Therefore, we force an error in both cases.
 */
#if defined(_STDC_C99) && (defined(__XOPEN_OR_POSIX) && !defined(_XPG6))
#error "Compiler or options invalid for pre-UNIX 03 X/Open applications \
 and pre-2001 POSIX applications"
#elif !defined(_STDC_C99) && \
 (defined(__XOPEN_OR_POSIX) && defined(_XPG6))
#error "Compiler or options invalid; UNIX 03 and POSIX.1-2001 applications \
 require the use of c99"
#endif
/*
 * Use of _XOPEN_SOURCE
 *
 * The following X/Open specifications are supported:
 *
 * X/Open Portability Guide, Issue 3 (XPG3)
 * X/Open CAE Specification, Issue 4 (XPG4)
 * X/Open CAE Specification, Issue 4, Version 2 (XPG4v2)
 * X/Open CAE Specification, Issue 5 (XPG5)
 * Open Group Technical Standard, Issue 6 (XPG6), also referred to as
 *    IEEE Std. 1003.1-2001 and ISO/IEC 9945:2002.
 *
 * XPG4v2 is also referred to as UNIX 95 (SUS or SUSv1).
 * XPG5 is also referred to as UNIX 98 or the Single Unix Specification,
 *     Version 2 (SUSv2)
 * XPG6 is the result of a merge of the X/Open and POSIX specifications
 *     and as such is also referred to as IEEE Std. 1003.1-2001 in
 *     addition to UNIX 03 and SUSv3.
 *
 * When writing a conforming X/Open application, as per the specification
 * requirements, the appropriate feature test macros must be defined at
 * compile time. These are as follows. For more info, see standards(5).
 *
 * Feature Test Macro                    Specification
 * ------------------------------------------------  -------------
 * _XOPEN_SOURCE                                         XPG3
 * _XOPEN_SOURCE && _XOPEN_VERSION = 4                   XPG4
 * _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED = 1           XPG4v2
 * _XOPEN_SOURCE = 500                                   XPG5
 * _XOPEN_SOURCE = 600  (or POSIX_C_SOURCE=200112L)      XPG6
 *
 * In order to simplify the guards within the headers, the following
 * implementation private test macros have been created. Applications
 * must NOT use these private test macros as unexpected results will
 * occur.
 *
 * Note that in general, the use of these private macros is cumulative.
 * For example, the use of _XPG3 with no other restrictions on the X/Open
 * namespace will make the symbols visible for XPG3 through XPG6
 * compilation environments. The use of _XPG4_2 with no other X/Open
 * namespace restrictions indicates that the symbols were introduced in
 * XPG4v2 and are therefore visible for XPG4v2 through XPG6 compilation
 * environments, but not for XPG3 or XPG4 compilation environments.
 *
 * _XPG3    X/Open Portability Guide, Issue 3 (XPG3)
 * _XPG4    X/Open CAE Specification, Issue 4 (XPG4)
 * _XPG4_2  X/Open CAE Specification, Issue 4, Version 2 (XPG4v2/UNIX 95/SUS)
 * _XPG5    X/Open CAE Specification, Issue 5 (XPG5/UNIX 98/SUSv2)
 * _XPG6    Open Group Technical Standard, Issue 6 (XPG6/UNIX 03/SUSv3)
 */

/* X/Open Portability Guide, Issue 3 */
#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 < 500) && \
    (_XOPEN_VERSION - 0 < 4) && !defined(_XOPEN_SOURCE_EXTENDED)
#define _XPG3
/* X/Open CAE Specification, Issue 4 */
#elif   (defined(_XOPEN_SOURCE) && _XOPEN_VERSION - 0 == 4)
#define _XPG4
#define _XPG3
/* X/Open CAE Specification, Issue 4, Version 2 */
#elif (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 == 1)
#define _XPG4_2
#define _XPG4
#define _XPG3
/* X/Open CAE Specification, Issue 5 */
#elif   (_XOPEN_SOURCE - 0 == 500)
#define _XPG5
#define _XPG4_2
#define _XPG4
#define _XPG3
#undef  _POSIX_C_SOURCE
#define _POSIX_C_SOURCE         199506L
/* Open Group Technical Standard , Issue 6 */
#elif   (_XOPEN_SOURCE - 0 == 600) || (_POSIX_C_SOURCE - 0 == 200112L)
#define _XPG6
#define _XPG5
#define _XPG4_2
#define _XPG4
#define _XPG3
#undef  _POSIX_C_SOURCE
#define _POSIX_C_SOURCE         200112L
#undef  _XOPEN_SOURCE
#define _XOPEN_SOURCE           600
#endif