求助:链接器原理

liuwons 2012-04-23 11:33:58
今天突发奇想:链接器是怎么找到我要用的库函数的?
然后,想了半天,毫无头绪,遂编个代码看看
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float a,b;
while(cin>>a>>b)
{
cout<<pow(a,b)<<endl;
}
return 0;
}
查看头文件math.h,找到如下声明:
_CRTIMP double __cdecl pow (double, double);
将此声明替换掉头文件math.h的声明,程序能编译,再删除这行,编译出错。
那么,就应该是这个声明告诉编译器到哪里去找到函数pow了,但是,问题又来了:编译器到底是在哪里找到了pow函数呢?
接着上网查了下,是在C运行时库CRT里找到的,但是,还有问题:CRT是在我的Windows操作系统中的一个dll里的么?那么别的操作系统也要实现这个类似的动态链接库吗?那如果操作系统没有类似的动态链接库,是不是编译器就不能正常工作了呢?还有,生成的.exe中的pow函数部分是静态链接还是运行时再动态链接呢?新手上路,问题好多,多点分吧。。。
...全文
143 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
akcw007 2012-04-24
  • 打赏
  • 举报
回复
所谓的库,其实就是在生成二进制的代码的时候,一股脑的把库拷贝到一个位置,汇编语言里不是有个概念叫“标号”嘛,你的程序,只知道跳到标号处,至于标号在哪就不知道了,但是链接的时候,就知道标号了

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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