我有一个项目,其中混合了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文件中的目标文件无法链接到项目中(默认情况下)?
答案 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++
。