体系结构的 c++ 未定义符号 x86_64:"function_name" 引用自

c++ undefined symbols for architecture x86_64: "function_name" referenced from

是的,我知道已经有几个问题对此进行了详细说明,但我觉得我的问题不是那么具体。只是有什么东西在盯着我看,但我看不太清楚。

我正在 Makefile 中一起编译 C 和 C++ 文件。在出现与 CFile2 中的函数有关的名义错误之前,一切似乎都很好 运行。

编译工作如下(带占位符名称):

g++ -c main.cpp
g++ -c Class.cpp
gcc -c CFile1.c
gcc -c CFile2.c
g++ main.o Class.o CFile1.o CFile2.o -lcurl

我的Class.cpp有一个Class.hpp,我的CFile1和CFile2分别有.h文件。一切都位于同一个目录中,并且它们都具有相同的头保护结构。

#ifndef
#define

//Insert function prototypes here

#endif

我也只在 Class.hpp 中包含了 CFile1.h 和 CFile2.h。仅根据此信息我是否遗漏了什么?

也许您在 c header 中遗漏了 extern "C"

如果你编译c文件并想link用c++你必须添加extern "C",但是c编译器不识别它所以它必须是#ifdef __cplusplus

在header开头添加,函数减速前:

#include <stdio> // and all other includes...
#ifdef __cplusplus
extern "C" {
#endif

void funnction_name1(); //sample 1
int funnction_name2(char* p); //sample 2

//must close the extern "C" block
#ifdef __cplusplus
}
#endif

你也可以在每个函数前添加如下:

 #ifdef __cplusplus
 extern "C"
 #endif
 // no block for the extern "C", so it applied only for a single function
 void funnction_name(); //a sample func.