我不知道像libc这样的标准库是如何链接的。我使用MingW编译器。我看到在它的bin文件夹中没有libc.dll文件。那么libc是如何链接的呢?编译器如何知道自定义库和动态库的区别?
我们使用构建工具,因为它们是编译代码和创建可执行文件、可部署文件等的实用方法。
例如。假设您有一个大型Java应用程序,该应用程序由数千个分离的源文件组成,这些文件被拆分在多个包中。假设它有许多JAR文件依赖项,其中一些用于您开发的库,另一些用于可以从标准位置下载的外部库。
您可以花几个小时手动下载外部JAR文件并将它们放在正确的位置。然后,您可以为每个源文件手动运行javac
,并多次运行jar
。每次在正确的目录中使用正确的命令行参数。。。并且以正确的顺序。
每次更改源代码时。。。重复上述过程的相关部分。
确保您不会犯错误,因为错误会导致您浪费时间查找由于构建不正确而导致的测试失败、运行时错误等。
或者。。。你可以使用一个构建工具来处理这一切。而且每次都做得正确。
总之,我们使用构建工具的原因是:
- 他们做的工作比手工少
- 它们更准确
- 结果的可重复性更强
我想知道为什么编译器不能做到这一点?
因为编译器不是为执行整个构建过程而设计的。就像你的烤箱不是用来做一顿三道菜的饭然后端上餐桌一样。
编译器(通常(是为编译单独的源代码文件而设计的。建设的意义远不止于此。