`

extern C 与c/c++动态库编写

阅读更多
extern c 是c++ 兼容c语言接口的一种方式,关键在于c++支持函数重载,同名的函数参数不通话编译后会产生不同的函数符号,而c语言则没有这个特性
在c++中使用extern "C", 就相当于以C的接口方式导出, 而C是不支持函数重载的;
这样编译的动态库不仅可以给c++程序调用还可以给其他任何语言区调用

去掉 extern"C"之后连也可以编译生成动态库,当c++程序调用这个库的时候没有问题, 但linux下别的语言比如java程序调用这个动态库的函数时, 报: "找不到函数定义"
linux下
test.h
#ifndef TEST_H
#define TEST_H
#ifdef __cplusplus
extern "C"
{
#endif
int add (int a,int b);
#ifdef __cplusplus
}
#endif
#endif


test.cpp

#include "test.h"
int add(int a,int b)
{

return a+b;
}


g++ -fPIC -shared test.cpp -olibtest.so

这种方式编译的动态库可以通过其他语言的程序调用

test.h
#ifndef TEST_H
#define TEST_H

int add (int a,int b);

#endif


test.cpp

#include "test.h"
int add(int a,int b)
{

return a+b;
}


g++ -fPIC -shared test.cpp -olibtest.so


这种方式编译的接口只能通过c++来调用,java调用的时候会提示add函数找不到

分享到:
评论

相关推荐

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    13.7 C库文件 208 13.8 本章小结 第1篇 基本知识 第1章 C++的初步知识 *1.1 从C到C++ *1.2 最简单的C++程序 1.3 C++程序的构成和书写形式 1.4 C++程序的编写和实现 1.5 关于C++上机实践 习题 第2章 ...

    使用C/C++扩展Python

    用python脚本写应用...  1、编写模块动态库文代码  这里以求大数为示例  代码(callTest1.cpp)如下:  extern C  {  int Max(int i1,int i2)  {  return (i1>i2)?i1:i2;  }  }  在bash中执行

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    13.7 C库文件 208 13.8 本章小结 第1篇 基本知识 第1章 C++的初步知识 *1.1 从C到C++ *1.2 最简单的C++程序 1.3 C++程序的构成和书写形式 1.4 C++程序的编写和实现 1.5 关于C++上机实践 习题 第2章 ...

    Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响

    静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响,extern "C"的用法,利用模块定义...

    DLL动态链接库的VC++编写实例

    静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。  如何利用工具查看动态链接库输出的函数,Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响,  extern "C"的用法,利用...

    vc++动态链接库视频教程

    静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响,extern "C"的用法,利用模块定义...

    c语言(编写程序最佳参考资料)

    c语言(编写程序最佳参考资料) 1.1 C语言的发展过程... 2 1.2 当代最优秀的程序设计语言... 2 1.3 C语言版本... 2 1.4 C语言的特点... 3 1.5 面向对象的程序设计语言... 3 1.6 C和C++... 3 1.7 简单的...

    VC++中的dll动态链接库应用实例

    内容索引:VC/C++源码,控件相关,动态链接库,DLL 孙鑫VC++中的dll动态链接库应用实例源码,本源码涉及动态链接库程序的编写以及静态库与动态库的区别说明,包括调用程序在链接静态库和动态库时的区别。如何利用工具...

    C++ Primer第四版【中文高清扫描版】.pdf

    1.1 编写简单的C++程序 2 1.2 初窥输入/输出 5 1.2.1 标准输入与输出对象 5 1.2.2 一个使用IO库的程序 5 1.3 关于注释 8 1.4 控制结构 10 1.4.1 while语句 10 1.4.2 for语句 12 1.4.3 if语句 14 1.4.4 读入未知数目...

    最新名企标准通用C++面试题,

    函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。 C++提供了C连接交换指定...

    百度人脸识别离线SDKV1.1版封装动态库供C#调用

    资料; 非常感谢,如有侵权,请与本人联系;...本demo的BaiduFaceDll\BaiduFaceDll目录,是本封装dll的c++源码。VS版本为2015,Framework版本为4.0。 本DEMO只是封装了几个示例,其余封装,参考样式自行编写;

    C语言解析教程(原书第4版)(美) 凯利.pdf

    《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个...

    static 用法

    static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     1.1 编写一个简单的C++程序 2  1.1.1 编译、运行程序 3  1.2 初识输入输出 5  1.3 注释简介 8  1.4 控制流 10  1.4.1 while语句 10  1.4.2 for语句 11  1.4.3 读取数量不定的输入数据 13  1.4.4 if语句 15...

    自己写的dll的简介

    1. 如果你只用C语言,那么必然以C文件创建DLL(自动编出C符号名),考虑到潜在的C++用户(此类用户多以静态调用方式使用DLL,因而需要看到其函数声明),我们还需要使用EXTERN_C关键字(详见上面的讨论)。...

    《VC++深入详解》第19章 动态链接库

    静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响,extern "C"的用法,利用模块定义...

    你必须知道的495个C语言问题.pdf

     “本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!”  ——Yechiel M.Kimchi,以色列理工学院 目录: 第1章 声明和...

    用pybind11封装C++实现的函数库的方法示例

    现有若干用C++编写的函数,为了能够用Python... 生成动态链接库pyd文件; 测试函数功能。 二.代码实现 1.用C++函数实现函数功能 //文件名:add.cpp extern C double add(double in1, double in2) { return in1 +

Global site tag (gtag.js) - Google Analytics