【发布时间】:2012-08-26 16:21:15
【问题描述】:
我在当前的 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 返回的值不正确。
我在链接项目时是否遗漏了任何特殊的链接器标志?
谢谢!
【问题讨论】:
-
ANN_4t70P1REC 是结构体的一个实例。当您说它“返回不正确的值”时,具体是什么意思?
-
也许您需要全部编译成 32 位?较新的机器可以安装为 64 位,因此您可能需要添加
-m32编译器标志 -
对不起。当然,我的意思是实例 ANN_4t70P1REC 中的函数 propFunc 返回意外结果。这些值似乎不是随机值或未分配的内存,但它们与我使用 XCode 或 VC++ 获得的值完全不同。
-
制作一个小型的纯 C 测试程序,并检查它是否返回正确的值。
-
你没有像将 *propFunc 存储在 int 某处这样奇怪的东西吗?在 64 位机器上,指针将是 8 个字节,而不是 4 个。按照建议,尝试
-m32看看是否会有所不同。
标签: c++ c compiler-errors