我可以在C ++项目中混合使用c和cpp文件吗?

时间:2013-11-21 10:41:38

标签: c++ c linker

我有一个项目,其中混合了c文件和cpp文件。链接器向我抛出错误:

undefined reference to <all my functions in the c files>

将所有*.c个文件重命名为*.cpp后,错误消失了。所以我不能混合这些文件或者这是一些编译器/链接器选项问题吗?


我的选择:

GCC C ++编译器:

-I/usr/include/glib-2.0 -I/usr/include/gtk-2.0 -I"/myPath" -O0 -g3   \
    -Wall -c -fmessage-length=0 `pkg-config --cflags glib-2.0 gtk+-2.0

GCC C编译器:

-I/usr/include/glib-2.0 -I/usr/include/gtk-2.0 -I"/myPath" -O0 -g3   \
    -Wall -c -fmessage-length=0 -std=c99 `pkg-config --cflags glib-2.0 gtk+-2.0`

GCC C ++链接器:

-L/usr/include/glib-2.0/glib `pkg-config --libs gtk+-2.0`

既然它说的是C ++ Linker,那是不是意味着c文件中的目标文件无法链接到项目中(默认情况下)?

2 个答案:

答案 0 :(得分:13)

你需要包装 C代码

extern "C" {
    #include "sample1.h"
}

更好的方法是在this StackOverflow question中,在C头文件中。

使用:

#ifdef __cplusplus
extern "C" {
#endif

所有C头文件的开头。

并使用:

#ifdef __cplusplus
}
#endif

所有C头文件的末尾。

答案 1 :(得分:4)

extern "C"是一种方法。另一种方法,假设你的C文件是(几乎无处不在)排序,已经可以编译为C ++,只是强迫编译器将它们视为C ++(它给它们适当的名称修改以使用你的C ++文件)。对于GCC,这是-x c++