3

我在当前的 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 返回不正确的值。

链接项目时是否有任何我错过的特殊链接器标志?

谢谢!

4

1 回答 1

1

你是什​​么意思:

C 代码是由一个古老的批处理文件创建的,不能使用 C++ 编译器进行编译

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

readelf -h <objectname>

检查是否有不同的 ABI。如果代码是由非常旧的 GCC <3.3/3.4 生成的,则与较新版本的链接可能会出现问题。

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

于 2012-09-18T11:30:10.947 回答