gpt4 book ai didi

c++ - 未定义对 'some_function' 的引用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:36 26 4
gpt4 key购买 nike

我正在尝试编译 C++ 程序,但出现此错误。

undefined reference to 'some_function'

而我确实在 makefile 中添加了包含 some_function 的文件。此外,我在使用它的文件中包含了 some_function 的声明。那么为什么编译器仍然提示找不到呢?可能的原因是什么?

我的makefile就是这样

CXX = g++
CXXFILES = dlmalloc.c pthreads.cpp queue.cpp

CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE
LIBS = -lpthread -ldl

all:
$(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS)

clean:
rm -f prog *.o

some_functiondlmalloc.c 中定义并在 pthreads.cpp 中使用。是不是和dlmalloc.c是C源代码文件,其他是C++文件有关。也许我应该在这里使用 extern "C" 关键字和 some_function,对吗?

最佳答案

Maybe I should use the extern "C" keyword here, right?

是的。如果您想从 C++ 代码调用编译为 C 的函数,则需要声明它 extern "C" - 但仅限于 C++,因为这在 C 中不是有效语法。

您可以使用 __cplusplus 预处理器符号来创建对任一语言都有效的 header :

#ifdef __cplusplus
extern "C" {
#endif
void some_function();

/* many, many more C declarations */

#ifdef __cplusplus
}
#endif

extern "C"{ ... } 中的内容作为 C 声明处理。小心确保每个函数总是以这种方式为 C++ 声明,并且 C 函数实际上是用 C++ 编写的(强烈不鼓励!)声明必须在函数的实际定义之前。

关于c++ - 未定义对 'some_function' 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com