我有一个用C编写的程序。原始的makefile有“gnu99”。 Clang编译它没有额外的命令行选项。但是如果我包含一个用c ++ 11编写的只有头文件库(variadic templates =>不能单独编译),那么地狱就会松散......
使用'clang inputfile.c staticlib.a -lsomelib'进行简单编译会产生如下错误:
error: unknown type name 'namespace'
error: unknown type name 'template'
... much much more ...
因此它尝试将c ++编译为普通c
如果我尝试'clang ++ -std = c ++ 11 -stdlib = libc ++ inputfile.c staticlib.a -lsomelib',那么:
error: expected ';' after enum
error: cannot initialize a variable of type 'rssFeedState *' with an lvalue of type 'void *'
... much much more ... !!!!! I want to make it ignore these !!!!
重写.c文件以编译为c ++是最后一个选项
如何让clang正确处理这种情况?
ie:将.c文件编译为c,但处理其中一个包含的头文件为c ++ 11(实例化变量模板,识别名称空间,c ++ 11标准库,......)
答案 0 :(得分:7)
完全是完全不可能的。包含C ++头的唯一方法是编写C ++代码。所以 only 选项是将C源重写为有效的C ++。对于大多数C来说,这不是一个很大的延伸。