体系结构的 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.
是的,我知道已经有几个问题对此进行了详细说明,但我觉得我的问题不是那么具体。只是有什么东西在盯着我看,但我看不太清楚。
我正在 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.