Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394216
  • 博文数量: 105
  • 博客积分: 4100
  • 博客等级: 上校
  • 技术积分: 1040
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-27 19:57
文章存档

2012年(1)

2011年(9)

2010年(4)

2009年(25)

2008年(66)

我的朋友

分类: LINUX

2008-08-05 15:41:29

今天自己试着做一个文件系统,基本上是照着网上一个朋友的日志做的,他的这篇日志被我转载到本博客上来了,写得非常详细,其中我在编译时遇到了一些问题。
首先说明一下我的主机环境:
主机:windows XP
虚拟机:Vmware 6.03 Ubuntu8.04
编译器版本:gcc-3.4.1-glibc-2.3.3
首先我用的是Busybox1.11,编译报错,后来再从网上下载一个1.10,编译仍旧报错,错误一样,就是位置不一样,应该是两个版本的文件还是有差别的。错误如下:
这会一看,做的工作太多了,终端上的配置信息没了。
大致是这样:miscutils/taskset.c:78: warning: passing arg 2 of `sched_getaffinity'
makes pointer from integer without a cast
miscutils/taskset.c:78: error: too many arguments to function
`sched_getaffinity'
miscutils/taskset.c:86: warning: passing arg 2 of `sched_setaffinity'
makes pointer from integer without a cast
miscutils/taskset.c:86: error: too many arguments to function
 
这是我找到问题的相关链接。
以上错误我也从这复制过来的,我的错误一样,不过提示的位置不是在78行与86行,不过这并不影响我们对问题的解决。
出现这个问题的原因是由于一个库中的一个函数与这里调用的一个函数所传递的参数个数不一样的原因,估计是库版本问题,在那些命令上加些宏处理来替换掉那些与库不兼容的函数,我将taskset.c文件中修改的一部分贴出来,大家对着改:
 
 print_aff:
   /* ++ Pb:glibc has 2 params for this func */
#ifdef __GLIBC__ /* ++ */
#warning "GLIBC DEFINED" /* ++ */
               if (sched_getaffinity(pid,  &mask) < 0) /* ++ */
#else /* ++ */
  if (sched_getaffinity(pid, sizeof(mask), &mask) < 0)
#endif /* ++ */
   bb_perror_msg_and_die("can't %cet pid %d's affinity", 'g', pid);
  printf("pid %d's %s affinity mask: "TASKSET_PRINTF_MASK"\n",
    pid, current_new, from_cpuset(mask));
  if (!*argv) {
   /* Either it was just "-p ",
    * or it was "-p " and we came here
    * for the second time (see goto below) */
   return EXIT_SUCCESS;
  }
  *argv = NULL;
  current_new += 8; /* "new" */
 }
 { /* Affinity was specified, translate it into cpu_set_t */
  unsigned i;
  /* Do not allow zero mask: */
  unsigned long long m = xstrtoull_range(aff, 0, 1, ULLONG_MAX);
  enum { CNT_BIT = CPU_SETSIZE < sizeof(m)*8 ? CPU_SETSIZE : sizeof(m)*8 };
  CPU_ZERO(&mask);
  for (i = 0; i < CNT_BIT; i++) {
   unsigned long long bit = (1ULL << i);
   if (bit & m)
    CPU_SET(i, &mask);
  }
 }
 /* Set pid's or our own (pid==0) affinity */
 /* ++++ Pb: glibc has 2 params for this func */
#ifdef __GLIBC__ /* ++ */
 if (sched_setaffinity(pid,  &mask)) /* ++ */
#else /* ++ */
 if (sched_setaffinity(pid, sizeof(mask), &mask))
#endif /* ++ */
  bb_perror_msg_and_die("can't %cet pid %d's affinity", 's', pid);
 if (!*argv) /* "-p [...ignored...]" */
  goto print_aff; /* print new affinity and exit */
 BB_EXECVP(*argv, argv);
 bb_simple_perror_msg_and_die(*argv);
}
进行红色标注的是我进行添加的。
进行如下修改后就可以顺利编译通过了。
阅读(975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~