库函数是怎么编译的

逍遥兮容与 2012-03-16 10:07:51
比方说对文件读写的库函数,最终还是会涉及到系统调用,库函数里应该没有系统调用的代码在的吧,系统调用的代码应该在系统内存的某个地方,但我们的程序不是被编译成二进制了么,那这里的过程是怎么编译的?
...全文
178 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
逍遥兮容与 2012-03-25
  • 打赏
  • 举报
回复
没有系统地学,感觉思维很混乱。。
逍遥兮容与 2012-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 muyi66 的回复:]

引用 5 楼 zzzz3621 的回复:

引用 4 楼 muyi66 的回复:

库函数可以通过调用系统 API 的方式来使用操作系统的文件系统。

问题是调用系统API 这个过程怎么实现的,编译成了什么?
就像用户自己定义的dll文件差不多。编译器通过API的头文件知道如何调用它们,检查语法错误等等,然后把对库函数里对API函数的调用写进目标代码里。
[/Quote]

抱歉,没注意到有回复


学操作系统的时候有讲到,程序要做到 地址独立和地址保护, 那我们的系统调用是跳到操作系统系统的代码片段里了么?我就是对这个有点不明白,如果跳了,又是怎么跳的呢? 你讲到的:对库函数里对API函数的调用写进目标代码里, 编译完的不是虚拟地址么?对API函数的调用的,具体是怎么调呢?
muyi66 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzzz3621 的回复:]

引用 4 楼 muyi66 的回复:

库函数可以通过调用系统 API 的方式来使用操作系统的文件系统。

问题是调用系统API 这个过程怎么实现的,编译成了什么?
[/Quote]就像用户自己定义的dll文件差不多。编译器通过API的头文件知道如何调用它们,检查语法错误等等,然后把对库函数里对API函数的调用写进目标代码里。
逍遥兮容与 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 muyi66 的回复:]

库函数可以通过调用系统 API 的方式来使用操作系统的文件系统。
[/Quote]
问题是调用系统API 这个过程怎么实现的,编译成了什么?
muyi66 2012-03-16
  • 打赏
  • 举报
回复
库函数可以通过调用系统 API 的方式来使用操作系统的文件系统。
  • 打赏
  • 举报
回复
动态链接库
kyle 2012-03-16
  • 打赏
  • 举报
回复
库里已经都把系统调用的头文件都包含打包了
fkwcowboy 2012-03-16
  • 打赏
  • 举报
回复
如果是LINUX系统

比如说你调个open函数 顺序应该是这样的

open()-> gcc(编译并链接依赖的函数库) -> glibc

glibc里面有C库函数的实现,而且它不需要依赖任何其他的库就可以完成自编译

不知道这么解释你能明白么

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧