使用当前gcc编译som_pak(97)

使用当前gcc编译som_pak(97),c,gcc,compiler-errors,som,C,Gcc,Compiler Errors,Som,我试图使用Kohonen最初的som实现,但使用vcal时出现了一个分段错误 事实证明,您可以使用一个非官方版本来更正在 但是从1997年开始,我确信cc编译器有很多变化,所以我得到了这个错误 checo@canija:~/bin/som/som_pak-3.2$ make gcc -O2 -c -o vcal.o vcal.c In file included from datafile.h:28, from vcal.c:26:

我试图使用Kohonen最初的som实现,但使用vcal时出现了一个分段错误

事实证明,您可以使用一个非官方版本来更正在 但是从1997年开始,我确信cc编译器有很多变化,所以我得到了这个错误

checo@canija:~/bin/som/som_pak-3.2$ make gcc -O2 -c -o vcal.o vcal.c In file included from datafile.h:28, from vcal.c:26: fileio.h:69: error: conflicting types for ‘getline’ /usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here make: *** [vcal.o] Error 1 checo@canija:~/bin/som/som_pak-3.2$ checo@canija:~/bin/som/som_-pak-3.2美元make gcc-O2-c-o vcal.o vcal.c 在datafile.h:28中包含的文件中, 摘自vcal.c:26: fileio.h:69:错误:“getline”的类型冲突 /usr/include/stdio.h:651:注:“getline”的先前声明在这里 制造:**[vcal.o]错误1 checo@canija:~/bin/som/som_-pak-3.2美元 文件datafile.h

1:#ifndef SOMPAK_DATAFILE_H 2:#define SOMPAK_DATAFILE_H ... 24:#include 25:#include 26:#include "lvq_pak.h" 27:#include "errors.h" 28:#include "fileio.h" 1:#如果没有SOMPAK数据文件# 2:#定义SOMPAK_数据文件 ... 24:#包括 25:#包括 26:#包括“lvq#u pak.h” 27:#包括“errors.h” 28:#包括“fileio.h” 我可以做些什么来重新编译这段代码吗?

将注释转换为答案,以解决问题

现在是一个POSIX函数;那不是1997年。您最好在
fileio.h
中重命名函数及其使用位置,可能只需在
getline
出现之前和
#include
之后添加即可

使用正确数量的参数,或

#define getline(...) som_getline(__VA_ARGS__)

如果
尚未包含,则添加它以确保
getline()
正常声明,然后由宏映射。

现在是POSIX函数;那不是1997年。您最好的选择可能是重命名
fileio.h
中的函数以及它的使用位置,可能简单到:
\undef getline
\define getline(a,b,c)som_getline(a,b,c)
fileio.h
出现之前和
getline
之后包含
。(使用正确数量的参数,或
#定义getline(…)som_getline(u VA_ARGS)
)。如果
尚未包含,则添加它以确保
getline()
正常声明,然后由宏映射。非常感谢。它工作得很好!
#define getline(...) som_getline(__VA_ARGS__)