网上的资料说,DLL是动态链接库,它与静态链接库对应。二者都是库文件。
库文件的本质是大量已经被前人定义的函数和类的集合。
问题是,这些个函数,是什么语言的函数,类又是什么语言的类呢?
在Java领域,前人写的Jar包往往就是库文件。由于包内部都是class字节码文件,所以可以轻易判断出,以Jar包为实体的库文件,包含的类和方法一点是Java语言的类和函数,而不是C++的类和函数。
那么,对于Java以外的语言,库文件都不是以Jar包为实体的了。
在仅仅有一个DLL文件摆在面前的时候,如何知道这个文件内部包含的函数和类是对应着哪一个语言的呢?
DLL文件内部存储的函数究竟是什么编程语言的函数?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 冰思雨 2021-11-30 10:33关注
Jar文件是采用zip算法的归档文件,它可以将磁盘中的某个目录的目录结构和文件进行压缩归档。
由于是 Java 首先使用的 jar 这个扩展名,所以,大多数情况下,jar 包中的 class 文件是由 Java 语言开发的源代码编译之后生成的。
但是,并不是所有的jar包,都是由Java由编译打包生成的。 Scala语言也可以编译生成 class 文件,也可以打包成 jar 包。
所以,不能武断说,我拿到一个Jar包,它里面存放的就是 Java 语言的类和函数。 这个认知是有些狭隘的。
为啥这么说呢,因为,class文件被称为字节码文件,字节码文件的文件结构已经被开放出来,其他语言如果愿意的话,某些语言也可以自己开发编译器,生成 class 文件,然后,在 JVM 虚拟机上面运行。同理,由于 class 字节码文件的结构已经被开放,JVM 也可以由多个厂家自行设计,并不是只有 Oracle/Sun 公司才生产 JVM。
通过上面的论述,我们可以理解到,库文件的主要目的是为了共享,可以由多种开发语言来生成。
通过库文件的类型来推断它原始的开发语言,这貌似并没有什么意义,你只要学会怎样使用这些库文件就可以了。
比如,Java 也可以调用 DLL 文件。C/C++/.net/python等语言都可以调用DLL。
DLL文件是windows系统的特有的库文件,使用了动态连接技术。
DLL文件,可以由C/C++/汇编/.net/VB等等多门语言编译生成。
正如Jar包一样,无法通过Jar推断是Java语言生成还是Scala语言生成,DLL文件也无法逆推开发语言。
当然,我们可以通过Jar包蛛丝马迹来推断,但是,不能百分百正确;同样的DLL文件也可以通过蛛丝马迹来推断,但是,不能百分百正确。
绝大多数的常用的Jar包都由Java编译生成,绝大多数的常用的DLL文件都有C++编译生成。
再次强调一下,根据我的认知,生成库文件的编程语言其实并不太重要,重要的是,你能用你现在掌握的开发语言使用这些库文件。
因为,库文件的存在根本意义就是分享,避免重复造轮子。在这基础之上才是库文件的其他意义。
能被其他语言或者其他程序所使用,才是最重要的。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?