用实验来说明lib的概念及链接方式


                           昨天在VC/MFC论坛有人说了如下这么一段话(基本上把lib的概念说清楚了,不过有点小问题):

                         这种说法只能说半对半错吧,以上说法只是在每个cpp文件没有关联的前提下,在大多数情况下cpp文件之间是存在依赖的,如果调用的函数依赖到了其他文件函数,那么相应的obj文件也是要链接进exe的。

                   以下是对这种说法的验证(在cpp文件之间没关联的前提下):
                  1.首先做个静态库,整个工程结构如下(一个头文件,六个对应的实现文件):

                                                   
                    2.建立一个测试工程来测试以上说法:
                       @1先只调用lib中的一个DisplayArrary函数:
                   
// use_lib.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "header.h"
#include <iostream>
#include<vector>
using namespace std;
#pragma comment(lib, "test_lib.lib")
int main()
{
    int arr[] = { 1, 3, 5, 7, 9 };
    //cout << add(2, 4) << endl;
    // cout << mut(6, 3) << endl;
    //cout << sub(5, 6) << endl;
    DisplayArrary(arr);
    //hello();
    return 0;
}

                      编译后exe文件36KB大小:
                       
                    @2 接下来把lib中的方法全部调用:
              
#include "stdafx.h"
#include "header.h"
#include <iostream>
#include<vector>
using namespace std;
#pragma comment(lib, "test_lib.lib")
int main()
{
    int arr[] = { 1, 3, 5, 7, 9 };
    cout << add(2, 4) << endl;
    cout << mut(6, 3) << endl;
    cout << sub(5, 6) << endl;
    DisplayArrary(arr);
    hello();
    return 0;
}
          编译后exe文件大小为46KB:
              
       从以上实验结果可以看出编译器在链接lib时只是链接用到的obj,而不是链接整个lib。之前我一直以为,包括很多对lib的解释的文章都是说lib就是obj的集合,链接的时候链接整个lib,通过实验可以看出这种说法显然是不准确的。不过一般的程序cpp文件之间是有关联的,所以可以认为链接整个lib吧。

posted on 2016-01-07 11:42  CodeNutter  阅读(317)  评论(0编辑  收藏  举报

导航