我通过包含外部标题在我当前的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返回不正确的值。
链接项目时是否遗漏了任何特殊的链接器标志?
谢谢!
答案 0 :(得分:1)
你是什么意思:
C代码由古老的批处理文件创建,无法编译 使用C ++编译器
您是否使用不同编译器生成的目标文件进行链接? 如果是这样,请尝试使用以下方法检查目标文件:
readelf -h <objectname>
检查是否有不同的ABI。如果代码是由非常旧的GCC&lt; 3.3 / 3.4生成的,那么您可能会遇到与较新版本链接的问题。
您确定链接期间没有任何警告吗?