Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
  • 程序耗时性能测试
  • 线程池开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
    • 四种spin lock
    • condition_variable和unique_lock
    • dpdk、kernel bypass
    • 智能网卡solarflare、Mellanox、X10等
    • 汇编寄存器和常见指令
    • c++ 类的静态成员变量未定义
    • C++获取类成员函数地址
    • preload示例
    • C++异常安全和RAII
    • C++11单例模式
    • C++歪门邪道
    • boost-program-option用法
    • c++17通过模板获取类成员的个数
    • 通过模板实现结构体成员拷贝-按成员名匹配
    • STL学习路径
    • boost库安装使用方法
    • C++文件读写
    • linux下socket通信demo,server和client
    • makefile写法
    • RxCpp
    • C++
    gaoliu
    2021-11-28
    目录

    C++导出so的方法,以及extern C 注意事项

    # c++中导出函数到so中给c调用

    c++编译时会修改函数名,而c不会,所以c++导出的函数给c调用时,需要加上extern "C" 修饰符,使编译器不改名,这样c就可以正常调用了。

    声明(.h)需要 extern "C"

    extern "C" void foo();
    
    1

    定义(.cpp)也需要 extern "C"

    extern "C" void foo(){
        //do something.
    }
    
    1
    2
    3

    如果so内部要调用该函数,那么其需要包含的声明(.h)也是

    extern "C" void foo();
    
    1

    因为cpp会将函数改名,所以为了保持声明和定义一致,该函数的声明处加了extern C。该函数所有的声明和定义的地方都要加 extern C, 不加的话就是另一个函数了。

    # C++中导出类或者函数到so中给C++调用

    由于c++编译时改名的方式是相同的,所以导出时不要加extern C, 其他的C++调用时,直接用相同的名字调用就可以了。

    编辑 (opens new window)
    上次更新: 2023/05/07, 17:27:54
    C++智能指针
    四种spin lock

    ← C++智能指针 四种spin lock→

    最近更新
    01
    通过模板实现结构体成员拷贝-按成员名匹配
    05-07
    02
    c++17通过模板获取类成员的个数
    05-01
    03
    avx-sse切换惩罚
    04-30
    更多文章>
    Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×