博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用实验来说明lib的概念及链接方式
阅读量:6881 次
发布时间:2019-06-27

本文共 1223 字,大约阅读时间需要 4 分钟。

hot3.png

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

                       
 这种说法只能说半对半错吧,以上说法只是在每个cpp文件没有关联的前提下,在大多数情况下cpp文件之间是存在依赖的,如果调用的函数依赖到了其他文件
函数,那么相应的obj文件也是要链接进exe的。
                   以下是对这种说法的验证(在cpp文件之间没关联的前提下):
                 
1.首先做个静态库,整个工程结构如下(一个头文件,六个对应的实现文件):
                                                   
                   
2.建立一个测试工程来测试以上说法:
                       @1先只调用lib中的一个DisplayArrary函数:
                   
// use_lib.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "header.h"#include 
#include
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 
#include
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吧。

转载于:https://my.oschina.net/bufferoverflow/blog/689252

你可能感兴趣的文章
Chrome浏览器插件开发心得
查看>>
ubuntu eclipse 配置 gtk+2.0 库
查看>>
Maven是什么
查看>>
Tomcat理解
查看>>
深入理解 intent (1)
查看>>
Java 中的伪共享详解及解决方案
查看>>
Spring 源码分析(一) —— 迈向Spring之路
查看>>
SVN Server 安装配置
查看>>
springCloud-9.Client使用Config Server
查看>>
多线程/线程池20问
查看>>
HBase性能优化方法总结(一):表的设计
查看>>
从异常堆栈中还原 ProGuard 混淆过的代码
查看>>
A20修改顶部状态栏 禁止跳转设置界面
查看>>
Android--多线程之Handler
查看>>
java synchronized用法
查看>>
MySQL开机自动启动的设置方法
查看>>
Spring中@Autowired注解、@Resource注解的区别
查看>>
迭代器
查看>>
【51CTO学院】搜索V3.0内测公告
查看>>
我的友情链接
查看>>