@@ -199,7 +199,7 @@ https://www.zhihu.com/question/20004379/answer/20123641
199
199
* 只要是运行在某操作系统之上的程序都会烙上该操作系统的印,对操作系统有依赖,包括编译程序。不过这些程序对操作系统的依赖程度和依赖的内容确实有很多区别。例如一支最简单的【Hello world程序】都会对【操作系统的C库】产生依赖,如果去掉【Hello world程序】的输入输出功能,只作加减或逻辑运算,【Hello world程序】依然会对操作系统有少量依赖,因为【Hello world程序】由运行在该【操作系统上的编译程序】编译的,有特定的目标文件格式,并由该【操作系统的载入程序】载入内存运行。这种只【在形式上】对OS存在依赖的"无用"程序可谓是最独立于OS的程序。在此基础之上,其它程序都对OS有不同程度的依赖,依赖表现在对OS内的各种程序库的依赖,比如C标准库,POSIX系统库,线程库、网络库和其它基于这些基础库的第三方应用代码库。
200
200
* 例如:java是通过虚拟机实现的跨平台的,也就是只编写一个程序,但是它去不同平台上运行的时候,其实带了对应的jvm,不同的操作系统由对应不同的jvm,去帮这一个程序去解释,而不同的jvm由sum公司去实现和更新,而且它会把对不同操作系统的底层调用(API)进行封装,对开发者却提供了统一的Java API,这样就减少程序员去了解操作系统API的差异性
201
201
* 《JavaScript的功能是不是都是靠C或者C++这种编译语言提供的?》:https://www.zhihu.com/question/49176184/answer/116675413
202
- * 编译依赖操作系统发生在链接阶段??
202
+ * 编译依赖操作系统(的库)发生在链接阶段
203
203
### 链接器(Linker):
204
204
* 链接器是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。
205
205
* 例如,hello程序中调用了printf函数,它是每个C编译器都会提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。链接器(ld)就负责处理这种合并。结果就得到hello文件,它是一个可执行目标文件,可以被加载到内存中。由系统执行。
0 commit comments