【问题标题】:Compiling with mpicc (MPICH2) and pthread_barrier (-lpthread)使用 mpicc (MPICH2) 和 pthread_barrier (-lpthread) 进行编译
【发布时间】:2010-07-02 21:33:10
【问题描述】:

我有一个 MPI 例程的功能实现,它运行良好。在使 MPI 和共享内存混合的过程中,我使用了 pthreads。这反过来证明了 pthread_barriers 的需要。

但是当我尝试使用 mpicc 编译器编译我的代码时,它会抱怨 pthread_barrier_t 和其他屏障命令。如果我删除这些,并保留其他线程部分,它编译就好了。

这是我插入的用于中断编译的代码行:

pthread_barrier_t* barrier;

对于编译我使用:

mpicc -lm myprogram.c -o myprogram

编译器返回的错误是:

myprogram.c:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token

第 34 行对应我上面写的内容。

[编辑] 我在 Ubuntu 9.10 上运行它,使用以下 gcc/mpicc 编译器: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1。 [/编辑]

有谁知道可能出了什么问题以及如何编译?

干杯!

【问题讨论】:

    标签: c compiler-errors pthreads mpich


    【解决方案1】:

    pthread_barrier_t 是高级实时线程选项的一部分,因此它可能在您的系统上不可用。 顺便说一句,如果你提出这样一个具体的问题,你应该总是提到操作系统、版本号和类似的东西。

    【讨论】:

    • 好的。我如何确定这是否是我系统的一部分 - 如果不是,我如何获得对它的支持,我可以吗?我已将操作系统和编译器版本添加到我的任务中。谢谢!
    • 是的,它应该在 ubuntu 上。做man pthread_barrier_wait 以了解您需要指定的包含等
    • 啊,你也应该给出gcc给你的错误。我依稀记得在某些版本中您不能调用变量barrier,因为他们在某些系统包含中以该名称定义了一个宏。也许将其重命名为其他名称只是为了查看。
    【解决方案2】:

    这意味着pthread_barrier_t 类型不在范围内。你有#include'd pthread.h吗?

    【讨论】:

    • 您能否提供一些无法编译的代码的最小示例?因为这个编译完美:#include int main () { pthread_barrier_t* barrier;返回0; }
    • 哪个编译器?在什么系统上?那不会在我的系统上使用 mpicc 编译..
    • 哇。它会产生相同的错误消息吗?它是否使用纯 gcc 而不是 mpicc 编译?我的是 Debian Squeeze、gcc 4.4.4 和 MPICH2 1.2.1.1。我也在 Ubuntu 9.04 的机器上试过,gcc 4.3.3(但没有 mpicc),也可以。
    • 对不起 Roman,我有点快。它确实可以编译 - 只是错过了 stdlib :) 我将尝试对我的代码制作一个更大的小规模示例,看看它何时会中断......
    • 我减少了它,发现它实际上是“std=c99”选项导致它失败......上面提到:#include int main () { pthread_barrier_t*屏障;返回0;无法用 c99 编译 - 知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2012-12-12
    • 2013-08-18
    • 2020-06-25
    • 2014-10-06
    • 2016-06-13
    相关资源
    最近更新 更多