混合C和C ++代码会在GCC中产生意外行为

时间:2012-08-26 16:21:16

标签: c++ c compiler-errors

我通过包含外部标题在我当前的C ++项目中使用遗留C代码:

extern "C" {
# include "ANN/ANN_4t70P1.h"
# include "ANN/ANN_4t70P2.h"
# include "ANN/ANN_4t70P3.h"
# include "ANN/ANN_4t70P4.h"
}

头文件如下所示:

extern int ANN_4t70P1(float *in, float *out, int init);

static struct {
  int NoOfInput;    /* Number of Input Units  */
  int NoOfOutput;   /* Number of Output Units */
  int(* propFunc)(float *, float*, int);
} ANN_4t70P1REC = {8,3,ANN_4t70P1};

C代码由古老的批处理文件创建,无法使用C ++编译器进行编译。不过,这个实现适用于Windows和Mac OS。但是,当我在Linux上使用gcc和g ++编译代码并运行应用程序时,ANN_4t70P1REC返回不正确的值。

链接项目时是否遗漏了任何特殊的链接器标志?

谢谢!

1 个答案:

答案 0 :(得分:1)

你是什么意思:

  

C代码由古老的批处理文件创建,无法编译   使用C ++编译器

您是否使用不同编译器生成的目标文件进行链接? 如果是这样,请尝试使用以下方法检查目标文件:

readelf -h <objectname>

检查是否有不同的ABI。如果代码是由非常旧的GCC&lt; 3.3 / 3.4生成的,那么您可能会遇到与较新版本链接的问题。

您确定链接期间没有任何警告吗?