我在家用电脑上成功安装了Cilk,这是一台运行Ubuntu的32位机器。我在我的64位Ubuntu上网本上尽我所能地复制了这个过程,当然,除了我下载了64位版本而不是32位版本。但是,当试图运行下面复制的非常简单的cilkexample.c时,我得到了很多错误,所有这些错误似乎都与它无法访问库文件有关:
In file included from /usr/include/stdio.h:28,
from cilkexample.c:1:
/usr/include/features.h:323:26: error: bits/predefs.h: No such file or director\
y
/usr/include/features.h:356:25: error: sys/cdefs.h: No such file or directory
/usr/include/features.h:388:23: error: gnu/stubs.h: No such file or directory
In file included from cilkexample.c:1:
/usr/include/stdio.h:36:25: error: bits/types.h: No such file or directory
/usr/include/stdio.h:161:28: error: bits/stdio_lim.h: No such file or directory
/usr/include/stdio.h:846:30: error: bits/sys_errlist.h: No such file or directo\
ry
In file included from /usr/include/stdio.h:34,
from cilkexample.c:1:
/usr/local/cilk/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.2.4/include/stddef.h:\
214: error: expected constructor, destructor, or type conversion before ‘typede\
f’
In file included from cilkexample.c:1:
/usr/include/stdio.h:49: error: expected constructor, destructor, or type conve\
rsion before ‘typedef’
等等,等等。
以下是我尝试使用命令cilk++ -o cilkexample cilkexample.c
编译的文件:
#include <stdio.h>
#include <cilk.h>
int foo() {
return 100;
}
int bar() {
return 50;
}
int cilk_main(int argc, char **argv) {
int x, y;
x = cilk_spawn foo();
y = cilk_spawn bar();
cilk_sync;
printf("Got %d %d, expecting %d %d\n", x, y, 100, 50);
return 0;
}
同样,我认为这必须是一个配置问题。代码未经我们教授分发的工作版本修改,我在另一台机器上测试过。
我能想到的最后一点信息是PATH。
******@********:~/Path/To/Cilk$ echo $PATH
/usr/local/cilk/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
感谢您的帮助!
答案 0 :(得分:3)
看起来你错过了一些标题。您说您使用的是Ubuntu,其中标头分发在xxx-dev
个包中。
在我的错误中搜索某些标题我发现bits/types.h
是Debian上libc6-dev
的一部分,你应该检查你是否至少拥有该包。
你应该查看你的发行版文件出现在哪个包中,我现在没有可用的Debian或Ubuntu机器。
编辑:我发现自己是一个Ubuntu框,看起来libc6-dev
包含至少列出的所有文件。 dpkg-query -S [file]
为您提供包名称