我试图从C文件中调用C ++函数。 所以我宣布该函数为extern" C"并在C文件中声明它。 从cpp文件创建一个目标文件,让它称之为cpp_object.o,然后为main.c创建一个目标文件。
我可以使用g ++来链接它们并不是那么明显。不,主要调用一些c libs所以我不能用g ++链接它们。所以我必须将它们与gcc联系起来。 我尝试了以下几点:
main: main.o cpp_object.o
${CROSS}${CC} $^ -o $@ ${LDFLAGS}
它显示目标文件找不到C ++ stdlib的错误。我不知道发生了什么事。谷歌搜索它尝试了以下:
main: main.o get_config.o
${CROSS}${CC} $^ -o $@ ${LDFLAGS} -lstdc++
然后它有效!?这是否意味着gcc使用c ++ stdlib编译代码?但我有点困惑,我们如何用c ++ stl编译C代码?
这实际上就是我想要的吗?或者我错过了什么?
答案 0 :(得分:2)
您链接的C ++对象需要C ++库。
如果您要与C驱动程序链接(例如:gcc
),则需要添加到C ++库的链接,因为这个C ++对象,而不是因为C对象。 C驱动程序不了解C ++。
如果您与C ++驱动程序链接(例如:g++
),则默认设置C ++库(您不需要将其添加到链接选项中)
请注意,此时所有对象都已编译,阶段为 link 阶段。
答案 1 :(得分:1)
最有可能的是,您只需要使用C ++编译器来启动最终链接。通过这样做,所有正确的链接参数将被传递给链接器。
main: main.o get_config.o
${CROSS}${CXX} $^ -o $@ ${LDFLAGS}