首页 编程语言 C调用C++示例代码及方法简述知识总结

C调用C++示例代码及方法简述知识总结

C调用C++示例代码及方法简述

本文章主要介绍了C调用C++示例代码及方法简述,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

1. C++代码及C主进程代码

  • c++程序代码test.cc
//test.cc 
#include "test.h" 
#include <iostream> 
using namespace std; 
void fun(){ 
    std::cout<<"Execute C++ fun!"<<std::endl; 
} 
  • 头文件test.h这个文件为C代码直接调用头文件,不要存在任何C++相关代码;
  • 添加宏定义#ifdef __cplusplus extern "C" { #endif 便于在c和c++代码中引用该头文件。
//test.h 
#ifndef TEST_HEADER 
#define TEST_HEADER 
    #ifdef __cplusplus 
    extern "C" {
    
    #endif 
        void fun(); 
    #ifdef __cplusplus 
    } 
    #endif 
#endif 
  • main主进程代码

  • 这里需要添加extern void fun(),能够找到C++源码中以C编译的该函数;

//main.c 
#include <stdio.h> 
#include "test.h" 
 
extern void fun(); 
 
void main(){
    
    fun(); 
    printf("Execute C main!\n"); 
    return ; 
} 

2. 编译和链接

  1. 步骤一:编译C++方法,执行命令
  • 报错“在函数‘_start’中:(.text+0x20):对‘main’未定义的引用”
      这里需要添加-c参数,告诉编译器,编译、汇编到目标代码test.o,不进行链接;
g++ -c test.cc -o test.o 
  1. 步骤二:方法一 gcc生成可执行文件
gcc -c main.c -o main.o 
gcc -o main main.o test.o -lstdc++ 
#或者以上两行命令合并,直接生成主程序进程 
gcc -o main main.c test.o -lstdc++ 
  1. 步骤二:方法二 生成静态库并gcc进行链接
#链接为静态库 
ar rs libtest.a test.o 
#这里面-L路径为libtest.a文件所在路径,也可是相对路径;  
#注意-lstdc++等标准库或被依赖的库要放在后面,即-l要依次依赖后面的库; 
gcc -o main main.c -L/root/workspace/test -ltest -lstdc++ 
  1. 结果输出
$ ./main 
Execute C++ fun! 
Execute C main! 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

Golang对未知结构json的解析知识总结

Golang对未知结构json的解析知识总结

Golang对未知结构json的解析

JAVA中获取当前系统时间

JAVA中获取当前系统时间

获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.S...
世界,您好!

世界,您好!

欢迎使用KIKK导航。这是您的第一篇文章。编辑或删除它,然后开始写作吧!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部