zoukankan      html  css  js  c++  java
  • C++调用C链接库 拂晓风起

    C++调用C链接库

      C++调用C语言的链接库,其实相对C调用C++简单。因为C++本来就向下兼容C吧(个人见解)。

      但由于编译器的设计不同,会出现一些问题,如下:(如中间部分,有一句undefined reference to 'helloC()'  ,helloC()是我在C链接库中的函数)

      

    简单说来原因就是未经处理的C代码编译后函数名可能变为_helloC()之类的,而C++编译后函数名却不是这样,所以就对不上。

    详细解释见http://www.cnblogs.com/kenkofox/archive/2009/11/05/1597053.html

    需要在include C的文件的时候加上extern "c"

      在练习中,写了三个文件:c.h  c.c  cpp.cpp 前两个编译为C链接库,cpp.cpp使用C。验证了C++可以访问到C的全局变量。

      c.h:

    #include "stdio.h"

    void helloC();

    int abc = 1;

      c.c:

    #include <stdio.h>
    #include 
    "c.h"

    void helloC(){
    printf(
    "I am Kenko");
    }

      cpp.cpp:(重点在于如何include)

    #include <iostream>
    using namespace std;
    extern "C" {
    #include 
    "c.h"
    }
    int main(){
    helloC();
    cout
    <<abc<<endl;
    return 0;
    }

      至于编译:

      1.链接库:gcc -shared -o libccall.so c.c

      2.编译cpp.cpp:g++ cpp.cpp ./libccall.so

      

      

    kenkofox@qq.com https://github.com/kenkozheng 欢迎投简历给我,一线大厂工作机会
  • 相关阅读:
    celery的使用
    DOM操作
    js动画
    列表案例
    背景案例
    背景属性连写
    背景属性
    链接导航案例
    链接伪类
    优先权之权重会叠加
  • 原文地址:https://www.cnblogs.com/kenkofox/p/1597052.html
Copyright © 2011-2022 走看看