【发布时间】:2020-04-14 20:06:05
【问题描述】:
我有3个文件,一个c++文件main.cpp,一个c文件test.c和一个头文件test.h
我想尝试在 C++ 文件中使用 C 代码。出于同样的原因,我在 test.h 中声明了一个函数,并在 test.c 中定义了它,并在 main.cpp 中使用了它
main_temp.c 只是为了解释。
测试.h
void test(int);
test.c
#include <stdio.h>
void test(int a) {
printf("%d", a);
main_temp.cpp
#include "test.h"
int main() {
foo(5);
}
在这里,我明白为什么这行不通了。 C 符号将是简单的 'foo',但由于 C++ 在创建符号时做了更多的事情,它可能是 'void@test(int)' 并且为了解决这个名称修改问题,我必须将 C++ 符号视为 C 符号。所以,我会使用 extern "C" 并且我的 main.cpp 变成这样:
main.cpp
extern "C" {
#include "test.h"
}
int main() {
foo(5);
}
我不明白为什么这不起作用!我明白了:
main.cpp:(.text+0xa): undefined reference to `test`
有人可以分享这些见解吗?
【问题讨论】:
-
你是否链接了 test.o,它是如何编译的?如果您使用的是构建系统,请显示您的命令行步骤,或者您的
Makefile或CMakefile等。 -
@aschepler,我刚刚做了:g++ main.cpp
-
那你就少了
test.c -
所以 test.c 甚至不是该程序的一部分,
test的定义确实丢失了。 -
@HemantBhargava 您不应该使用
g++前端来编译C 文件。您需要使用gcc编译test.c 和使用g++编译main.cpp,然后将它们链接在一起。
标签: c++