在extern内"C" { },__cplusplus仍然定义了宏。当我想包括C版mpi.h在我的图书馆的头部被动态加载,这将无法正常工作,mpi.h还发现__cplusplus并仍将加载就像是用C ++开。
#undef __cplusplus与gcc一起使用。但是我不想依靠这一点。
那么,如何编写一个使用mpi的C ++版本和-链接到使用mpi的C版本的C库的C ++程序(在#include <mpi.h>标头中已经出现了?
示例代码:
library.h:
#ifdef __cplusplus
extern "C" {
#endif
#include <mpi.h>
void library_do(MPI_Comm comm);
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
program.cpp:
#include <library.h>
#include <mpi.h>
int main() {
MPI::Init();
// do some mpi C++ calls...
library_do(MPI::COMM_WORLD);
MPI::Finalize();
}
Run Code Online (Sandbox Code Playgroud)
如果有人想在此处播放示例library.c:
#include <stdio.h>
#include "library.h"
void library_do(MPI_Comm comm)
{
int rank;
MPI_Comm_rank(comm, &rank);
printf("MPI Rank: %d", rank);
}
Run Code Online (Sandbox Code Playgroud)
并编译我尝试的所有内容
#ifdef __cplusplus
extern "C" {
#endif
#include <mpi.h>
void library_do(MPI_Comm comm);
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)