You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从C调用C++函数遇未定义引用错误,求编译方法及问题排查

C调用C++函数出现"undefined reference"的问题解决

代码细节优化(非必改,但更规范)

你的print.cpp里重复写了extern "C",其实没必要——因为link.h已经通过__cplusplus宏,在C++编译器编译时自动给print()声明加上了extern "C"。可以修改为:

#include <iostream>
#include "link.h"

void print(){
   std::cout << "hello from cpp" << std::endl;
}

(加endl是为了让输出换行,避免终端提示符紧跟在输出后面)

核心问题:编译命令错误

你之前用的gcc -o test test.c link.h犯了三个关键错误:

  • 头文件不需要作为编译参数传入,编译器会通过#include自动解析
  • 没有编译print.cpp,导致链接阶段找不到print()的实现代码
  • C代码依赖C标准库,仅用gcc链接会缺失相关依赖

正确的编译命令

方法1:分步编译+链接

  1. 编译C源文件为目标文件:
gcc -c test.c -o test.o
  1. 编译C++源文件为目标文件:
g++ -c print.cpp -o print.o
  1. 链接生成可执行文件(用g链接以自动引入C标准库):
g++ test.o print.o -o test

方法2:一次性编译所有源文件

直接用g处理所有文件,它会自动区分C/C代码并完成编译链接:

g++ test.c print.cpp -o test

原理说明

extern "C"的作用是禁用C的名字修饰机制,让C编译器生成和C语言兼容的函数符号,这样C代码调用时能匹配到正确的函数实现。但前提是你必须把C++源文件编译进程序,否则链接器找不到对应的函数实现,就会报"undefined reference"错误。

内容的提问来源于stack exchange,提问作者S P Krishna Phanindra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:35:41