C 未知呼叫约定
c++ unknown calling convention
我正在构建的一个软件包(sprng,链接在这里,但对此问题不必要(在我不熟悉的某些地方使用了呼叫语法。对于我以前的依赖关系堆栈(Intel 16.0带有OpenMPI 1.10.1(,它起作用了。不幸的是,我目前的堆栈(具有OpenMPI 3.1.3的Intel 19(不喜欢它。我不是c++
人,除非我必须进行。
示例代码是:
#include <mpi.h>
int main(int argc, char *argv[]) {
int myid;
MPI::Init(argc, argv);
myid = MPI::COMM_WORLD.Get_rank();
}
在上一个堆栈上,这似乎很好:
$ mpic++ --version
icpc (ICC) 16.0.0 20150815
Copyright (C) 1985-2015 Intel Corporation. All rights reserved.
$ mpirun --version
mpirun (Open MPI) 1.10.1
Report bugs to http://www.open-mpi.org/community/help/
$ mpic++ sprng_issue.cpp
<no errors>
但是有新的堆栈:
$ mpic++ --version
icpc (ICC) 19.0.1.144 20181018
Copyright (C) 1985-2018 Intel Corporation. All rights reserved.
$ mpirun --version
mpirun (Open MPI) 3.1.3
Report bugs to http://www.open-mpi.org/community/help/
$ mpic++ sprng_issue.cpp
sprng_issue.cpp(6): error: name followed by "::" must be a class or namespace name
MPI::Init(argc, argv);
^
sprng_issue.cpp(7): error: name followed by "::" must be a class or namespace name
myid = MPI::COMM_WORLD.Get_rank();
^
compilation aborted for sprng_issue.cpp (code 2)
我的问题是:
此调用方法有名称吗?我很难搜索,因为只是。有多奇怪/旧/非标准?
是否有编译器标志(Intel或其他(可以实现遗产行为?
任何其他建议,用于不实质修改软件包代码的简便方法?
C++
绑定是多年前从标准中删除的,默认情况下不再构建在开放MPI中。
从长远来看,您应该现代化代码(使用普通的C
绑定或其他抽象层,例如Boost.MPI
(。
同时,您可以简单地使用configure --enable-mpi-cxx
重建MPI。
相关文章:
- 呼叫运营商<<临时
- "std::unique_XXX"命名约定背后的基本原理是什么?
- 为什么在 x64 中忽略__stdcall调用约定?
- 引发异常的方法的命名约定 (C++)?
- 窗口调用约定
- 我应该提到纯虚函数中的调用约定吗?
- 呼叫 QSound,它们之间有延迟 Qt C++
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 什么是呼叫说明
- 如何使用gcc指定stdcall调用约定
- 为什么make_shared在不同的呼叫中分配相同的地址?
- Clang:x86 FPU调用约定
- 该标准是否说明了例外和不同调用约定的共存
- Clang++的InterlockedExchange的32位调用约定错误,但MSVC可以
- std::sort & comp - 调用约定?
- 错误:类型"std::__1::basic_string<char>"不提供呼叫运算符
- C 未知呼叫约定
- 无法为extern c int _clrcall生成pinvoke ..呼叫元数据中缺少的约定
- 定义呼叫约定有什么意义
- 目标C - C++ 关于外部链接和呼叫约定的标准