由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 【请教】mpicc 和 mpiCC编译问题
相关主题
gcc 编译的时候要包括 header source file 吗?这个结果是啥,为什么呢?
弱问c++里有没有NULL这个keyword?C问题,被64bit iPhone搞晕了
另一个Fortran 问题请问一个implicit conversion的问题(C++)
关于C++中 extern "C"的问题。a string define question (c++)
Urgent question: AIX, C++11, Shared Object[合集] question on item15 in Effective C++
又一个初级问题: C++中多如牛毛的#define格式[合集] 请问-fno-implicit-templates的用处
深情的呼唤师傅们!C++做题做不出来啦!怎么样最好的编译不同文件在同一个VC project里面?
两个class的交叉引用问题C code参数传递出错可能的原因
相关话题的讨论汇总
话题: gkfree话题: mpicc话题: c++话题: 编译话题: __
进入Programming版参与讨论
1 (共1页)
I****y
发帖数: 1498
1
请教各位高手关于在linux下编译并行程序的两个问题,其中涉及到C语言编译器和C++
编译器的区别。
1. 我需要先编译一个lib,叫ParMetis,它是SuperLU_dist(并行SuperLU解线性稀疏方
程组)所需要的。 该库ParMetis需要用支持mpi的编译器编译,默认的mpicc可以编译,
也可以生成*.a的库文件,但有如下warning:
warning #266: function declared implicitly
GKfree(&your_adjncy, &your_adjwgt, &line, LTERM);
由于我的程序中有C++的成份,所以我改用mpiCC (支持mpi的C++编译器)来编译库
ParMetis. 却得到如下错误:
initpart.c(420): error: identifier "__GKfree" is undefined
GKfree(&bestwhere, &perm, LTERM);
我仔细找了一下,在rename.h里有如下语句
#define GKfree __GKfree
t****t
发帖数: 6806
2
it said "__GKfree" is undefined, so the #define was recognized.
search for the declaration of __GKfree. C allows implicit declaration of
function, while C++ does not. if can't find, just declare one yourself.

【在 I****y 的大作中提到】
: 请教各位高手关于在linux下编译并行程序的两个问题,其中涉及到C语言编译器和C++
: 编译器的区别。
: 1. 我需要先编译一个lib,叫ParMetis,它是SuperLU_dist(并行SuperLU解线性稀疏方
: 程组)所需要的。 该库ParMetis需要用支持mpi的编译器编译,默认的mpicc可以编译,
: 也可以生成*.a的库文件,但有如下warning:
: warning #266: function declared implicitly
: GKfree(&your_adjncy, &your_adjwgt, &line, LTERM);
: 由于我的程序中有C++的成份,所以我改用mpiCC (支持mpi的C++编译器)来编译库
: ParMetis. 却得到如下错误:
: initpart.c(420): error: identifier "__GKfree" is undefined

t****t
发帖数: 6806
3
for 2, you probably need to enclose the declaration of fortran/C functions
by
extern "C" { ... }
you can do this:
#ifdef __cplusplus
extern "C" {
#endif
#include .....
#include ....
#ifdef __cplusplus
}
#endif

【在 I****y 的大作中提到】
: 请教各位高手关于在linux下编译并行程序的两个问题,其中涉及到C语言编译器和C++
: 编译器的区别。
: 1. 我需要先编译一个lib,叫ParMetis,它是SuperLU_dist(并行SuperLU解线性稀疏方
: 程组)所需要的。 该库ParMetis需要用支持mpi的编译器编译,默认的mpicc可以编译,
: 也可以生成*.a的库文件,但有如下warning:
: warning #266: function declared implicitly
: GKfree(&your_adjncy, &your_adjwgt, &line, LTERM);
: 由于我的程序中有C++的成份,所以我改用mpiCC (支持mpi的C++编译器)来编译库
: ParMetis. 却得到如下错误:
: initpart.c(420): error: identifier "__GKfree" is undefined

I****y
发帖数: 1498
4
太感谢trust的讲解了,
终于明白了原来C++是不支持implicit declearation的,
现在问题是GKfree的函数已经定义了,但为什么它没有被替换成__GKfree呢,define不
就是字符替换吗? 很奇怪为什么C++不能识别。
另外,C++里面有一个好的功能是用域。我有一个库是用C++写的,如果改用C编译器的
话,好像它不能识别域,怎么能让 C也能够识别域呢?
谢谢,鞠躬
p****s
发帖数: 32405
5
你又打错他的名字了,
事实上本版95%的人不能正确拼写他的id, 可见这个名字取得很失败...
记住, thrust一定要H了才能使用!
先H, 再使用
一万遍

【在 I****y 的大作中提到】
: 太感谢trust的讲解了,
: 终于明白了原来C++是不支持implicit declearation的,
: 现在问题是GKfree的函数已经定义了,但为什么它没有被替换成__GKfree呢,define不
: 就是字符替换吗? 很奇怪为什么C++不能识别。
: 另外,C++里面有一个好的功能是用域。我有一个库是用C++写的,如果改用C编译器的
: 话,好像它不能识别域,怎么能让 C也能够识别域呢?
: 谢谢,鞠躬

P********e
发帖数: 2610
6

当然不是.
test using the #if defined and #ifdef
没办法,用file做域来区别,#include

【在 I****y 的大作中提到】
: 太感谢trust的讲解了,
: 终于明白了原来C++是不支持implicit declearation的,
: 现在问题是GKfree的函数已经定义了,但为什么它没有被替换成__GKfree呢,define不
: 就是字符替换吗? 很奇怪为什么C++不能识别。
: 另外,C++里面有一个好的功能是用域。我有一个库是用C++写的,如果改用C编译器的
: 话,好像它不能识别域,怎么能让 C也能够识别域呢?
: 谢谢,鞠躬

t****t
发帖数: 6806
7
1. how did you define/declare it?
did you define/declare using "GKfree", but declared BEFORE
#define GKfree __GKfree
?
2. Of course you can't use namespace (I assume you meant namespace) in C. If
you must, declare wrapper function in C++.

【在 I****y 的大作中提到】
: 太感谢trust的讲解了,
: 终于明白了原来C++是不支持implicit declearation的,
: 现在问题是GKfree的函数已经定义了,但为什么它没有被替换成__GKfree呢,define不
: 就是字符替换吗? 很奇怪为什么C++不能识别。
: 另外,C++里面有一个好的功能是用域。我有一个库是用C++写的,如果改用C编译器的
: 话,好像它不能识别域,怎么能让 C也能够识别域呢?
: 谢谢,鞠躬

1 (共1页)
进入Programming版参与讨论
相关主题
C code参数传递出错可能的原因Urgent question: AIX, C++11, Shared Object
弱问一个ifdef 和ifndef又一个初级问题: C++中多如牛毛的#define格式
Xerces-C++ in vs.net question深情的呼唤师傅们!C++做题做不出来啦!
global variable usage question in C++两个class的交叉引用问题
gcc 编译的时候要包括 header source file 吗?这个结果是啥,为什么呢?
弱问c++里有没有NULL这个keyword?C问题,被64bit iPhone搞晕了
另一个Fortran 问题请问一个implicit conversion的问题(C++)
关于C++中 extern "C"的问题。a string define question (c++)
相关话题的讨论汇总
话题: gkfree话题: mpicc话题: c++话题: 编译话题: __