Tho*_*mas 3 c sockets solaris network-programming
在Solaris上,为了获取struct msghdr中的msg_control字段并具有IPV6_TCLASS,我似乎需要定义_XPG4_2和__EXTENSIONS__.
如果我在包含任何东西之前将它们定义为1,它似乎有效:
#if defined (__SVR4) && defined (__sun)
# define _XPG4_2 1
# define __EXTENSIONS__ 1
#endif
Run Code Online (Sandbox Code Playgroud)
这与这个问题有关.
bk1*_*k1e 10
man -k XPG4揭示有一个standards(5)手册页,其中列出了各种标准的功能测试宏和库链接信息,包括以下内容:
X/Open CAE要构建或编译符合其中一个X/Open CAE规范的应用程序,请使用以下准则.如果需要CAE和POSIX功能,应用程序无需设置POSIX功能测试宏.
Run Code Online (Sandbox Code Playgroud)SUS (XPG4v2) The application must define _XOPEN_SOURCE with a value other than 500 (preferably 1) and set _XOPEN_SOURCE_EXTENDED=1.
通过/usr/include以下方式获取_XOPEN_SOURCE更多信息/usr/include/sys/feature_tests.h:
希望使用指定为X/Open UNIX Extension的任何函数的应用程序编写者必须定义
_XOPEN_SOURCE和_XOPEN_SOURCE_EXTENDED=1._XPG4_2不应使用Sun内部宏,因为可能会出现意外结果.
因此,定义_XPG4_2自己不是实现目标的方式.
如果任何结构定义依赖于这些宏,那么在所有翻译单元中定义它们肯定会更好.最简单的方法是在编译器命令行上指定它们:
cc -D_XOPEN_SOURCE=1 -D_XOPEN_SOURCE_EXTENDED=1
Run Code Online (Sandbox Code Playgroud)
如果您正在使用make,您应该可以通过向变量添加-D参数来执行此操作CFLAGS:
CFLAGS += -D_XOPEN_SOURCE=1 -D_XOPEN_SOURCE_EXTENDED=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |