我正在使用在其发行版包中提供的Makefiles在CentOS上构建一个没有问题的C程序。但是我需要修改源文件,我需要使用iqxmlrpc和boost库来达到这个目的。我已经分别更改了Makefile,但是当我想构建包时,我得到以下错误:
../ src / libiqxmlrpc / libiqxmlrpc / except.h:9:21:错误:stdexcept:没有这样的文件或目录 ../src/libiqxmlrpc/libiqxmlrpc/except.h:10:18:错误:字符串:没有这样的文件或目录 在../src/libiqxmlrpc/libiqxmlrpc/libiqxmlrpc.h:17中包含的文件中, 来自redir.c:2617: ../src/libiqxmlrpc/libiqxmlrpc/except.h:14:错误:预期' =',',',';',&# 39; ASM'或' 属性'之前' iqxmlrpc'
......其次是许多其他错误......
我相信上面的错误是因为iqxmlpc是用c ++编写的,而gcc将它视为C,所以我尝试了以下内容:
1)使用g ++
2)使用gcc -x c ++
如上所述,错误会在许多头文件中更改为以下内容:
错误:在'this'之前预期','或'...'
编译器抱怨的所有行都有这个或删除关键字作为参数。见下文:
int net_route(struct in_addr * dst,int delete);
或
extern int gad_new(struct gad_t ** this)
你知道我该如何解决这个问题吗?坦率地说,我不知道使用'这个'或者'删除'意思是参数。这些参数名称只是gcc忽略了我们不能使用关键字的规则吗?
------------------------------
BTW,原始程序员在他的代码中使用了嵌套函数,这些函数使用gcc编译得很好。当我切换到g ++时,编译器抱怨函数定义不允许在另一个函数中使用。有什么方法可以告诉g ++忽略这个错误吗?
答案 0 :(得分:2)
那些不是C中的关键字,它们都是C ++。
在使用C ++编译代码之前,您必须重命名这些参数。
在完成之前,您可能会遇到与C ++更严格的类型检查相关的其他移植问题。
另一种选择是将C和C ++代码保存在单独的文件中,并在C ++代码中使用extern "C"
进行必须越过边界的每个函数调用。由于您的C代码广泛使用嵌套函数和C ++中不允许的其他功能,这可能是您最快的方法。
答案 1 :(得分:0)
this
和delete
是C ++中的保留关键字(不在C中)。使用g++
编译时,不能将它们用作变量名。
最好在参数中使用不同的变量名,然后使用g++
进行编译。