您的位置:首页 > 运维架构 > Linux

ICTCLAS2015 linux编译不通过解决办法(expected constructor, destructor or type conversion before '(' token)

2015-01-28 21:44 537 查看
下载了最新版本的ICTCLAS2015(NLPIR)

我是在centos6.5机上用codeblocks开发C++程序,导入了NLPIR.h头文件,以及加载了libNLPIR.so库,

但是始终编译不通过,报错是:

NLPIR.h:105: 错误:expected constructor, destructor or type conversion before '(' token

NLPIR.h:121: 错误:expected constructor, destructor or type conversion before '(' token

NLPIR.h:140: 错误:expected constructor, destructor or type conversion before '(' token

NLPIR.h:157: 错误:expected constructor, destructor or type conversion before '(' token

NLPIR.h:172: 错误:expected constructor, destructor or type conversion before '(' token

NLPIR.h:188: 错误:expected constructor, destructor or type conversion before '(' token

......

换了一台机器进行测试,居然编译通过,运行成功,推断是机器原因,后来查找资料,发现一哥们也遇到类似的问题,我根据他的思路将下述部分

#ifdef OS_LINUX

#define NLPIR_API extern "C"

#else

#ifdef NLPIR_EXPORTS

#define NLPIR_API extern "C" __declspec(dllexport)

#else

#define NLPIR_API extern "C" __declspec(dllimport)

#endif

#endif

替换为 #define NLPIR_API extern "C"

重新编译,上述错误全部消失,只剩下一个错误“expected initializer before NLPIR",然后我定位到相应位置:

#ifdef OS_LINUX

class CNLPIR {

#else

class __declspec(dllexport) CNLPIR{

#endif

(查google, StackOverflower)注释掉宏判断,即

//#ifdef OS_LINUX

class CNLPIR {

//#else

//class __declspec(dllexport) CNLPIR{

//#endif

重新编译运行,成功。

后来想一想,应该是所测试的机器未定义宏OS_LINUX,于是在NLPIR.h头文件开始处添加如下语句

#ifdef __linux

#ifndef OS_LINUX

#define OS_LINUX

#endif

#endif

并还原前面几步的操作,即可解决centos6.5上ICTCLAS2015编译不通过问题。

ps. 我在大数据论坛提交问题及解决方案(http://www.bigdatabbs.com/forum.php?mod=viewthread&tid=8425&extra=)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐