This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
                                
                                    (32个答案)
                                
                        
                                4年前关闭。
            
                    
是的,我知道已经有几个问题需要详细说明,但是我觉得我的问题不是特定于细节的。只是有些东西盯着我,但我看不到。

我正在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标头中缺少extern "C"

如果您编译c文件并希望与c ++链接,则可以添加extern "C",但是c编译器无法识别它,因此它必须是#ifdef __cplusplus

在函数减速之前,在标头的开头添加:

#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.

关于c++ - 用于架构x86_64的C++ undefined symbol :中引用的“function_name”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32385631/

10-12 17:22