免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3034 | 回复: 1
打印 上一主题 下一主题

GCC中使用的宏定义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-05 13:12 |只看该作者 |倒序浏览
做一个小程序测试时用到sched_setaffinity,结果最后链接出问题,后来发现在/usr/include/sched.h中:
#ifdef __USE_GNU
/* Access macros for `cpu_set'.  */
#define CPU_SETSIZE __CPU_SETSIZE
#define CPU_SET(cpu, cpusetp)   __CPU_SET (cpu, cpusetp)
#define CPU_CLR(cpu, cpusetp)   __CPU_CLR (cpu, cpusetp)
#define CPU_ISSET(cpu, cpusetp) __CPU_ISSET (cpu, cpusetp)
#define CPU_ZERO(cpusetp)   __CPU_ZERO (cpusetp)


/* Set the CPU affinity for a task */
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
                  __const cpu_set_t *__cpuset) __THROW;

/* Get the CPU affinity for a task */
extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
                  cpu_set_t *__cpuset) __THROW;
#endif


而__USE_GNU在<features.h>中先undef,然后根据另一个宏来决定是否定义:
#ifdef  _GNU_SOURCE
# define __USE_GNU  1
#endif


这一头文件使用其它头文件时会被引用起来。但_GNU_SOURCE不知道是啥时候定义的,感觉是应该编译时支持
GCC扩展(缺省应该就是)就自动定义的,但实际测试却不是这样的;加上-std=gnu89或-std=gnu99都不行。

现在是编译时在命令行直接加上-D_GNU_SOURCE来搞定问题的,但感觉很奇怪。

论坛徽章:
0
2 [报告]
发表于 2009-09-12 15:40 |只看该作者
没人知道是咋回事吗,还是我用的这个版本有问题?我的操作系统内核是2.6.18-8.el5 for x86_64,编译器是GCC 4.1.1 20070105 (Red Hat 4.1.1-52)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP