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

3 篇文章 0 订阅

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!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值