DLL和lib的不同之一——一个要外部链接,一个不需要
2016-04-21 14:41
375 查看
今天发现,如果dll库函数里用了一个std::string&类型的参数,且在使用时修改了string的内容,那么可能会因为调用者用的内存分配器与dll库里的不一致,而导致崩溃等严重问题。
神奇的是,同事把dll改为lib,就解决了这个问题。准确来说,lib方式,库内的函数调用new函数时,也会跳转到已经被重载的全局new上面去。
仔细看了下VS2013的工程设置,确实,如果是LIB项目,那么就没有链接器的选项,dll和exe就有。
说明dll和lib的确有本质区别,特此一记。
以前看过《链接,装载与库》,自认为比较了解dll,看来还是有很多知识漏洞。
C++真复杂。
神奇的是,同事把dll改为lib,就解决了这个问题。准确来说,lib方式,库内的函数调用new函数时,也会跳转到已经被重载的全局new上面去。
仔细看了下VS2013的工程设置,确实,如果是LIB项目,那么就没有链接器的选项,dll和exe就有。
说明dll和lib的确有本质区别,特此一记。
以前看过《链接,装载与库》,自认为比较了解dll,看来还是有很多知识漏洞。
C++真复杂。
相关文章推荐
- Java 使用Socket实现文件上传与下载
- Android AutoLayout全新的适配方式
- Scrapy Pipeline之与数据库交互
- POj-3104 Drying 二分+贪心
- 大数和之添加了小数问题
- leetcode12.IntegerToRoman&&RomanToInteger
- java 路径(相对路径和绝对路径)问题汇总【转】
- 博客精华帖汇总与导读索引
- jQuery使用伪递归重复执行动画
- hibernate--session的CRUD方法, delete, load,get,update,saveorupdate, clear, flush
- 4537: [Hnoi2016]最小公倍数
- poj 1860 Currency Exchange
- 中国最热门论坛-2011-11-[转]
- dapper查询demo、
- 横向长方形ProgressBar
- socket与文件描述符
- SpringMVC @RequestBody接收Json对象字符串--http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html
- oracle和sql server取第一条记录的区别以及rownum详解
- JS四舍五入方法
- Roll to roll architecture