跨模块接口和动态库如何实现高效交互?
- 内容介绍
- 文章标签
- 相关推荐
本文共计932个文字,预计阅读时间需要4分钟。
模块+首先定义下模块的概念,在C++中,我们可以将每个二进制文件视为一个模块。例如,一个exe可执行程序、一个dll或so动态库。通常来说,一个exe会依赖于几个dll动态库。+我们编写一个带有界面的聊天程序。
模块首先定义下模块的概念,在C++中可以认为每个二进制文件为一个模块。比如一个exe可执行程序、一个dll或so动态库。通常来说一个exe会依赖于几个dll动态库。
我们写一个带界面的聊天程序,exe为入口主程序 是主模块,它可能依赖于QtWidgets QtCore等Qt模块、libevent第三方模块、我们自己写的基础库xxbase模块。
模块自己内部调用比较简单,因为编译环境和平台都一致,不存在不兼容的问题。如果想把我们的功能提供给其他人使用,就需要导出接口和dll二进制文件了。每种语言有自己的接口定义形式,接口在C或C++里就是一些.h头文件。头文件里定义了结构体、函数等,供其他模块调用。
也可以认为模块由接口和二进制文件组成。windows编译出来的dll肯定不能在linux上调用、32位编译出的dll又不能被64位程序调用、Debug模式和Release模式也存在很多差异。C++不像Java,Java是编译一次在任意操作系统和平台都能跑起来。C++呢?不同操作系统、不同CPU、不同系统位数、甚至不同优化参数,编译出来的二进制文件都不通用。
动态库就是编译好的、可供其他模块调用的二进制文件。
本文共计932个文字,预计阅读时间需要4分钟。
模块+首先定义下模块的概念,在C++中,我们可以将每个二进制文件视为一个模块。例如,一个exe可执行程序、一个dll或so动态库。通常来说,一个exe会依赖于几个dll动态库。+我们编写一个带有界面的聊天程序。
模块首先定义下模块的概念,在C++中可以认为每个二进制文件为一个模块。比如一个exe可执行程序、一个dll或so动态库。通常来说一个exe会依赖于几个dll动态库。
我们写一个带界面的聊天程序,exe为入口主程序 是主模块,它可能依赖于QtWidgets QtCore等Qt模块、libevent第三方模块、我们自己写的基础库xxbase模块。
模块自己内部调用比较简单,因为编译环境和平台都一致,不存在不兼容的问题。如果想把我们的功能提供给其他人使用,就需要导出接口和dll二进制文件了。每种语言有自己的接口定义形式,接口在C或C++里就是一些.h头文件。头文件里定义了结构体、函数等,供其他模块调用。
也可以认为模块由接口和二进制文件组成。windows编译出来的dll肯定不能在linux上调用、32位编译出的dll又不能被64位程序调用、Debug模式和Release模式也存在很多差异。C++不像Java,Java是编译一次在任意操作系统和平台都能跑起来。C++呢?不同操作系统、不同CPU、不同系统位数、甚至不同优化参数,编译出来的二进制文件都不通用。
动态库就是编译好的、可供其他模块调用的二进制文件。

